我想为我设置字体家庭组合框,已填充了以下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字体” 来表示格式?

有帮助吗?

解决方案

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

的FontFamily支持构造

FontFamily(String familyName);

所以,你应该能够从一个字符串到的FontFamily使用类似new FontFamily("Arial")转换。

您可以把在一类,它实现IValueConverter其中的FontFamily和字符串之间转换。

要从的FontFamily得到的字符串,您可以访问FamilyNames属性为是针对特定的文化的字体得名。

然后,只需将您的FontFamily结合使用转换器。

其他提示

亚历克斯的回答听起来很不错。

您也可以尝试一个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)
            );

然后你只需绑定的的SelectedItem 的的您的组合框文本,并且fontFamily 的的您的的TextBlock 以“的FontFamily”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top