我有一个非常简单的ComboBox
,里面有一些x:Static
个项目:
<ComboBox SelectedItem="{Binding Source={x:Static u:Settings.All}, Path=CaptionFontStyle}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock FontStyle="{Binding .}" FontSize="14" Text="{Binding .}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
<x:Static Member="FontStyles.Normal"/>
<x:Static Member="FontStyles.Italic"/>
<x:Static Member="FontStyles.Oblique"/>
</ComboBox>
这给了我这个:
它很好地与我的Settings
绑定,FontStyle
可以应用于项目,我可以直接使用SelectedItem
而不会出现并发症。
我的问题是:如何使用DynamicResource
本地化(翻译)每个项目,而不会失去此方案的简单性?
我尝试从StaticExtension
派生,只需添加另一个字符串属性来保存本地化文本,并通过绑定链接回控件:
<TextBlock FontStyle="{Binding .}" FontSize="14" Text="{Binding Text}"/>
但是这并没有像预期的那样奏效。 :/
正如@Funk所写,我可以简单地使用SelectedValue
和SelectedValuePath
直接绑定到类的属性。所以我现在正在使用这个方案:
<ComboBox SelectedValuePath="FontStyle"
SelectedValue="{Binding Source={x:Static u:Settings.All}, Path=MyFontStyle}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock FontStyle="{Binding FontStyle}"
FontSize="14" Text="{Binding Text}"/>
</DataTemplate>
</ComboBox.Resources>
<TextBlock FontStyle="Normal" Text="Normal"/>
<TextBlock FontStyle="Italic" Text="Itálico"/>
<TextBlock FontStyle="Oblique" Text="Oblíquo"/>
</ComboBox>
答案 0 :(得分:1)
您可以使用RichText类
public class RichText
{
#region Text Property
private String _text = "";
public String Text
{
get { return _text; }
set { _text = value; }
}
#endregion Name Property
#region FontStyle Property
private FontStyle _fontStyle = FontStyles.Normal;
public FontStyle FontStyle
{
get { return _fontStyle; }
set { _fontStyle = value; }
}
#endregion FontStyle Property
}
使用SelectedValue更新设置
<ComboBox
SelectedValuePath="FontStyle"
SelectedValue="{Binding Source={x:Static u:Settings.All}, Path=CaptionFontStyle}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock FontStyle="{Binding FontStyle}" FontSize="14" Text="{Binding Text}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
<local:RichText Text="Foo">
<local:RichText.FontStyle>
<x:Static Member="FontStyles.Normal"/>
</local:RichText.FontStyle>
</local:RichText>
<local:RichText Text="Bar">
<local:RichText.FontStyle>
<x:Static Member="FontStyles.Italic"/>
</local:RichText.FontStyle>
</local:RichText>
<local:RichText Text="Far">
<local:RichText.FontStyle>
<x:Static Member="FontStyles.Oblique"/>
</local:RichText.FontStyle>
</local:RichText>
</ComboBox>
使用文本绑定时实现INotifyPropertyChanged。