2010-08-10 80 views
2

我试图把我的字体家庭组合框,已填充了以下XAML的设定值:WPF的FontFamily格式问题

<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。任何人都可以快速告诉我该组合框将会应用什么类,以及如何转换一个字符串,例如这种格式的“宋体”?

回答

6

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

的FontFamily支持构造

FontFamily(String familyName); 

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

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

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

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

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) 
      ); 

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