WPF FontFamily формат вопрос
-
27-09-2019 - |
Вопрос
Я пытаюсь установить выбранное значение моего Family Combobox, которое было заполнено следующим 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>
Поле, которое я должен установить Combobox, чтобы представляет собой строку, но это вызывает форматныеxceptions. Может кто-нибудь можно быстро сказать мне, какой класс будет ожидать Combobox, а также как преобразовать строку, например, «Arial» в этот формат?
Решение
Надеюсь, я правильно понял ваш вопрос.
Fontfamily поддерживает конструктор
FontFamily(String familyName);
Так что вы должны быть в состоянии использовать что-то вроде new FontFamily("Arial")
преобразовать из строки на fontfamily.
Вы могли бы поставить это в классе, который реализует IValueConverter
который преобразуется между FontFamily и String.
Чтобы добраться от FontFamily в String, вы можете получить доступ к собственности FamilyNames, чтобы получить имя для шрифта, который специфичен для определенной культуры.
Тогда просто установите Footfamily Binding, чтобы использовать преобразователь.
Другие советы
Ответ Алекса звучит очень хорошо.
Вы также можете попробовать зависимостьPROPERTY:
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)
);
Тогда вы просто связываете Выполнитель вашей Поле со списком и то Текст и fontfamily вашей TextBlock «FontFamily».