Pergunta

Estou tentando definir o valor selecionado do meu Font Family ComboBox, que foi preenchido com o seguinte 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>

O campo para o qual tenho que definir o ComboBox é uma string, mas isso causa o formatexcepções. Alguém pode me dizer rapidamente qual classe a Combobox estará esperando e também como converter uma string, por exemplo, "Arial" para esse formato?

Foi útil?

Solução

Espero ter entendido sua pergunta corretamente.

Fontfamily suporta o construtor

FontFamily(String familyName);

Então você deve poder usar algo como new FontFamily("Arial") para converter de uma string para uma família de font.

Você pode colocar isso em uma classe que implementa IValueConverter que converte entre FontFamily e String.

Para ir da Fontfamily para a String, você pode acessar a propriedade FamilyNames para obter um nome para a fonte, específica de uma cultura específica.

Em seguida, basta definir sua família Fontsily para usar o conversor.

Outras dicas

A resposta de Alex parece muito boa.

Você também pode tentar uma dependênciaProperty:

   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)
            );

Então você simplesmente liga o Item selecionado do seu Caixa combo e a Texto e Fontfamily do seu Textblock para "Fontfamily".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top