Domanda

Sto cercando di impostare il valore selezionato della mia combobox Font famiglia, che è stato popolato con il seguente 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>

Il campo devo impostare la casella combinata a è una stringa, ma che provoca FormatExceptions. Qualcuno può dirmi rapidamente quale classe casella combinata si aspetterà ed anche come convertire una stringa di esempio "Arial" per quel formato?

È stato utile?

Soluzione

Spero di aver capito la tua domanda correttamente.

FontFamily supporta il costruttore

FontFamily(String familyName);

Quindi, si dovrebbe essere in grado di usare qualcosa come new FontFamily("Arial") per convertire da una stringa a un FontFamily.

Si potrebbe mettere che in una classe che implementa IValueConverter che converte tra FontFamily e Stringa.

Per arrivare da FontFamily a stringa, è possibile accedere alla proprietà FamilyNames per ottenere un nome per il tipo di carattere, che è specifico per una particolare cultura.

Poi basta impostare il FontFamily vincolante per utilizzare il convertitore.

Altri suggerimenti

Alex' suoni risposta molto buona.

Si potrebbe anche provare una 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)
            );

Quindi è sufficiente legano il SelectedItem del Combobox e Testo e FontFamily del TextBlock per " FontFamily".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top