在Combobox中以自己的风格显示字体样式

时间:2014-01-09 19:05:49

标签: c# wpf xaml combobox

我有两个组合框。

  1. for FontFamily。
  2. for FontWeight。
  3. 第一个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或类似的东西以自己的风格显示上面组合框中的每个项目,而不对每个项目进行样式化。

    例如我的输出应该类似于:

    正常

    斜体

1 个答案:

答案 0 :(得分:3)

利用类型转换器:对于大多数属性,有一个转换器将字符串转换为属性的合适值。需要能够将XAML(这是所有字符串)解析为类型(考虑编写类似Width="Auto"的内容,同时记住Widthdouble值。)

所以,你可以使用这样的东西:

<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"