Вопрос

Я пытаюсь установить выбранное значение моего 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».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top