我有一个非常简单的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>
这给我带来了以下内容:
它与我的设置
很好地绑定,可以将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>
SelectedValue
和SelectedValuePath
。这使我可以简单地使用TextBlock
而不是这个自定义类。谢谢。 - Nicke Manarin