2010-08-10 42 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」 的。