WPF FontFamily格式问题

时间:2010-08-10 16:50:10

标签: c# wpf fonts binding formatexception

我正在尝试设置我的Font Family组合框的选定值,该组合框已填充以下XAML:

<ComboBox ItemsSource="{x:Static Fonts.SystemFontFamilies}" Name="cboFont">
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel MinWidth="256" />
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Margin="2" Text="{Binding}" FontFamily="{Binding}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

我必须将组合框设置为字符串,但这会导致FormatExceptions。任何人都可以快速告诉我组合框将期待什么类以及如何转换字符串,例如那种格式的“Arial”?

2 个答案:

答案 0 :(得分:7)

希望我能正确理解你的问题。

FontFamily支持构造函数

FontFamily(String familyName);

因此,您应该可以使用new FontFamily("Arial")之类的内容将字符串转换为FontFamily。

你可以把它放在一个实现IValueConverter的类中,它在FontFamily和String之间进行转换。

要从FontFamily获取字符串,您可以访问FamilyNames属性以获取特定文化特定字体的名称。

然后只需设置FontFamily绑定即可使用转换器。

答案 1 :(得分:1)

亚历克斯的回答听起来非常好。

你也可以尝试DependencyProperty:

   public FontFamily FontFamily
        {
            get { return (FontFamily)GetValue(FontFamilyProperty); }
            set { SetValue(FontFamilyProperty, value); }
        }

 public static DependencyProperty FontFamilyProperty =
            DependencyProperty.Register(
            "FontFamily",
            typeof(FontFamily),
            typeof(YourClassVM),
             new FrameworkPropertyMetadata(SystemFonts.MessageFontFamily
        , FrameworkPropertyMetadataOptions.AffectsRender |
        FrameworkPropertyMetadataOptions.AffectsMeasure)
            );

然后,您只需将 Combobox SelectedItem TextBlock Text and FontFamily 绑定到“的FontFamily”。