WPF FontFamily domanda Format
-
27-09-2019 - |
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?
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".