3

我正在尝试设置我的字体系列组合框的选定值,该组合框已填充以下 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”)转换为该格式?

4

2 回答 2

7

希望我正确理解了您的问题。

FontFamily 支持构造函数

FontFamily(String familyName);

所以你应该能够使用类似的东西new FontFamily("Arial")从字符串转换为 FontFamily。

你可以把它放在一个实现IValueConverterFontFamily 和 String 之间转换的类中。

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

然后只需将您的 FontFamily 绑定设置为使用转换器。

于 2010-08-10T17:01:51.110 回答
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)
            );

然后,您只需将ComboboxSelectedItem和TextBlockText 和 FontFamily绑定到“FontFamily”。

于 2010-08-11T07:54:30.933 回答