我有两个组合框。
第一个Combobox的Xaml看起来像:
<ComboBox IsEditable="True"
ItemsSource="{x:Static Fonts.SystemFontFamilies}" >
<ComboBox.ItemTemplate>
<DataTemplate DataType="{x:Type FontFamily}">
<TextBlock Text="{Binding}" FontFamily="{Binding}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
在上面的XAML输出中,我可以看到自己风格的所有字体名称。我想为第二个组合框做类似的事情。目前我在第二个组合框中有一些项目如下:
<ComboBox IsEditable="True">
<x:Static Member="FontStyles.Normal"/>
<x:Static Member="FontStyles.Italic"/>
<x:Static Member="FontStyles.Oblique"/>
</ComboBox>
如何使用Combobox.ItemTemplate或类似的东西以自己的风格显示上面组合框中的每个项目,而不对每个项目进行样式化。
例如我的输出应该类似于:
正常
斜体
斜
答案 0 :(得分:3)
利用类型转换器:对于大多数属性,有一个转换器将字符串转换为属性的合适值。需要能够将XAML(这是所有字符串)解析为类型(考虑编写类似Width="Auto"
的内容,同时记住Width
是double
值。)
所以,你可以使用这样的东西:
<ComboBox>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding }"
FontStyle="{Binding }" />
</DataTemplate>
</ComboBox.ItemTemplate>
<system:String>Normal</system:String>
<system:String>Italic</system:String>
<system:String>Oblique</system:String>
</ComboBox>
FontStyle
的绑定设置一个字符串,然后输入转换器弹簧进行操作,并将字符串转换为属性使用的实际FontStyle
值。
注意:这可能不适用于.NET 3.0 / 3.5
编辑:刚才记得,在.NET 3.0 / 3.5中,如果为绑定定义了转换器,那么类型转换器不起作用 - 绑定要求转换器返回正确的类型属性。不确定它是否在.NET 4.0 / 4.5中被更改(可能不是,并且,恕我直言,不应该 - 需要检查它以验证)。
哦,并添加此xmlns:xmlns:system="clr-namespace:System;assembly=mscorlib"