WPF FontFamily Формат вопроса - PullRequest
       9

WPF FontFamily Формат вопроса

2 голосов
/ 10 августа 2010

Я пытаюсь установить выбранное значение моего комбинированного списка семейства шрифтов, который заполнен следующим 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>

Поле, в которое я должен установить комбинированный список, является строкой, ноэто вызывает исключение FormatException.Может кто-нибудь быстро сказать мне, какой класс будет ожидать комбинированный список, а также как преобразовать строку, например, "Arial" в этот формат?

Ответы [ 2 ]

7 голосов
/ 10 августа 2010

Надеюсь, я правильно понял ваш вопрос.

FontFamily поддерживает конструктор

FontFamily(String familyName);

Так что вы должны иметь возможность использовать что-то вроде new FontFamily("Arial") для преобразования строки в FontFamily.

Вы можете поместить это в класс, который реализует IValueConverter, который преобразует между FontFamily и String.

Чтобы перейти от FontFamily к строке, вы можете получить доступ к свойству FamilyNames, чтобы получить имя для шрифта, специфичное для конкретной культуры.

Затем просто установите привязку FontFamily для использования конвертера.

1 голос
/ 11 августа 2010

Ответ Алекса звучит очень хорошо.

Вы также можете попробовать свойство 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 вашего Combobox и Text и FontFamily вашего TextBlock с "FontFamily".

...