WPF, Silverlight, Windows Phone 8 und Windows Store Apps

WPF: Standardschriftart festlegen
Kommentare

In der Kolumne „XAML Expertise“ präsentiert Gregor Biswanger Top-How-tos zum Thema XAML. Einsteiger und Fortgeschrittene XAML-Experten sollen hier durch geballtes Wissen gesättigt werden. Heute gibt es folgende Expertise: „WPF: Standardschriftart festlegen“. Viel Spaß mit XAML Expertise.

Die Standardschriftart wird vom Betriebssystem vorgegeben und soll für eine gewohnte User Experience sorgen. Unter Windows XP war es Tahoma, seit Windows Vista ist es Segoe UI. Die hauseigene Corporate Identity eines Entwicklers gibt aber ungeachtet dessen oft eine eigene Schriftart vor, sodass seine Software natürlich diese verwenden soll.

Schriftart in WPF ändern

Das Festlegen einer anderen Schriftart ist ganz einfach über die Dependency Property FontFamily von Window möglich. Der Nachteil ist hierbei, dass diese Einstellung bei jedem weiteren Fenster innerhalb der Anwendung aufs Neue festgelegt werden muss. Bei weiteren Softwareprojekten wäre dieser zusätzliche Aufwand ebenfalls nötig. Aus diesen Gründen eignen sich eigene Styles, die man über RessourceDictionaries auslagert. Was sich ziemlich einfach anhört, entpuppt sich allerdings als wahrer Problemfall. Es ist zwar möglich, die Schriftart über einen Style festzulegen und diese über die Application Resources bereitzustellen (Listing 1). Allerdings überschreibt WPF beim Initialisieren der Oberfläche den gewünschten Style mit den Standardeinstellungen des Betriebssystems.

http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  StartupUri="MainWindow.xaml">
  

    

  

Mit einem kleinen Trick kann man nach dem Überschreiben ebenfalls wieder die Einstellungen überschreiben. Dazu wird in der Code-Behind-Datei für App.xaml (App.xaml.cs), die OnStartup-Methode überschrieben. In dieser wird dann automatisch auf alle vom Typ Window zugewiesenen Styles zugegriffen. Möglich ist das über die statische Methode FrameworkElement.StyleProperty.OverrideMetadata. Diese erhält eine neue Instanz von FrameworkPropertyMetadata mit einem neuen DefaultValue:

public partial class App : Application
{
  protected override void OnStartup(StartupEventArgs e)
  {
    FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata
      {
        DefaultValue = FindResource(typeof(Window))
    });
  }
}
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -