標題可能有點不好理解,我解釋一下: 術語指的是常用辭彙,比如用戶(User)、名稱(Name)、郵箱(Email)等。 帶修飾符指的是UI上需要呈現`用戶:`、`名稱:`、`郵箱:`等這些情況。 由於之前已經定義過了用戶此類辭彙的多語言,如果還需要再對它們帶冒號的版本定義一次多語言,這個過程會非常冗 ...
標題可能有點不好理解,我解釋一下:
術語指的是常用辭彙,比如用戶(User)、名稱(Name)、郵箱(Email)等。
帶修飾符指的是UI上需要呈現`用戶:`、`名稱:`、`郵箱:`等這些情況。
由於之前已經定義過了用戶此類辭彙的多語言,如果還需要再對它們帶冒號的版本定義一次多語言,這個過程會非常冗餘,而且容易出錯。如何解決?
1. 定義新的IValueConverter
1 public class StringExpandColonConverter : IValueConverter 2 { 3 public object Convert(object value, Type targetType, object parameter, CultureInfo culture) => $"{value}{ColonString}"; 4 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException(); 5 }
上面的`ColonString`是冒號的多語言變數。
2. 擴展Binding
1 public class StringColonBinding : Binding 2 { 3 private static readonly IValueConverter _converter = new StringExpandColonConverter(); 4 public StringColonBinding() 5 { 6 Converter = _converter; 7 Mode = BindingMode.OneTime; 8 } 9 }
3. 使用
<TextBlock Text="{mk:StringColonBinding Source={x:Static res:ResourceCommon.SiteString}}" />
mk是Binding擴展所在的命名空間,res是多語言資源文件所在的命名空間。
是不是很方便?^-^