【问题标题】:Show Font-Style in a Combobox in it's own style在组合框中以自己的样式显示字体样式
【发布时间】:2014-01-09 19:05:48
【问题描述】:

我有两个组合框。

  1. FontFamily。
  2. 用于字体粗细。

第一个组合框的 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 或类似的东西以自己的样式显示上述组合框中的每个项目,而无需为每个项目设置样式。

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

正常

斜体

倾斜

【问题讨论】:

    标签: c# wpf xaml combobox


    【解决方案1】:

    利用类型转换器:对于大多数属性,都有一个转换器可以将字符串转换为适合属性的值。需要能够将 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"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 2012-04-17
      • 2011-01-28
      • 2010-12-14
      相关资源
      最近更新 更多