Le problème est que votre source Binding
est réglé sur {...} StaticResource. Il devrait être {x: Statique ...} à la place parce que SystemFontFamilies
est une simple simple propriété CLR statique sur l'objet System.Windows.Media.Fonts
, pas n'importe quel type de ressource. En fait, vous n'avez même pas besoin d'un Binding
. Ceci est tout ce que vous avez besoin:
<ListBox ItemsSource="{x:Static m:Fonts.SystemFontFamilies}" />
Vous devriez vraiment arrêter de lire ici, mais vous peut être un peu sneakier si vous avez besoin des performances maximales. Avec la méthode ci-dessus - que vous devez absolument utiliser - vous remettez un ICollection<FontFamily>
à WPF qui est en fait une instance ReadOnlyCollection<FontFamily>
. Cela, à son tour, envelopper un tableau simple FontFamily[]
contenant les éléments que vous voulez.
En raison de la couche d'emballage supplémentaire, WPFinternally won't detect la CollectionView
optimale lors du remplissage de votre contrôle de l'interface utilisateur et devra revenir à ses techniques plus lentes itératives. Dans ce cas, cependant, l'encapsuleur expose par inadvertance le tableau brut à son support SyncRoot
préhistorique, de sorte que vous pouvez en fait accéder au FontFamily[]
directement à travers cette propriété si vous le souhaitez.
<ListBox ItemsSource="{Binding Source={x:Static m:Fonts.SystemFontFamilies},
Path=(sc:ICollection.SyncRoot)}" />
En couple des choses à ce sujet. Notez que nous sommes de retour à l'utilisation d'un Binding
puisque l'extension de balisage {x: Static} (StaticExtension
) ne suivra pas un chemin de propriété au-delà de sa propriété statique. Notez également la distribution à ICollection
, ce qui est requis ici (c'est-à-dire la façon dont WPF a froncé les sourcils à ce sujet en général). Pour prendre en charge la distribution, vous devez ajouter l'espace de noms System.Collections
en haut de votre fichier XAML comme indiqué ci-dessous. Et finalement, avec cette astuce, vous perdrez également la possibilité de voir la liste des polices dans le concepteur XAML Visual Studio, mais tout fonctionne très bien lors de l'exécution.
...
xmlns:sc="clr-namespace:System.Collections;assembly=mscorlib"
...
Comment avez-vous connu la méthode get_SystemFontFamilies? – Frinavale
@Frinavale, il s'agit de la propriété SystemFontFamilies, les propriétés sont compilées en méthodes get_PropertyName dans un assembly –