我正在尝试设置我的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”?
答案 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”。