2009-02-23 4 views
8

Wie kann ich ein UserControl in WPF erstellen, das einen grundlegenden Standard-Stil hat, aber bei Bedarf auch leicht thematisch gestaltet werden kann?Bedienbare Bedienelemente in WPF

Haben Sie einige gute Richtlinien, Blogeinträge oder ein Beispiel, die dieses spezielle Thema erklären?

Vielen Dank im Voraus, Marco

Antwort

7

In WPF Themen sind einfach eine Reihe von XAML-Dateien jeden eine Resource enthält, die die Stil und Vorlage Definitionen enthalten, die in der Anwendung verwendet, um die Kontrollen gelten. Eine Theme-Datei könnte wie folgt aussehen:

Dies wird anweisen WPF
[assembly: ThemeInfo(
    ResourceDictionary.None, 
    ResourceDictionaryLocation.SourceAssembly 
)] 

zu suchen:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:uc="clr-namespace:MyApp.UserControls"> 

    <!-- Standard look for MyUserControl --> 
    <Style x:Key="Standard" TargetType="{x:Type uc:MyUserControl}"> 
    <Setter Property="Width" Value="22" /> 
    <Setter Property="Height" Value="10" /> 
    </Style> 

</ResourceDictionary> 

Unterstützung für Themen in einer WPF-Anwendung muss explizit, indem folgendes Attribut auf die Baugruppe aktiviert werden eine eingebettete Ressource Datei mit dem Namen themes \ generic.xaml, um das Standard-Aussehen der Steuerelemente der Anwendung zu bestimmen.

Beachten Sie, dass, wenn die themenspezifische Wörterbücher sind separate Dateien enthalten als die Versammlung der Anwendung, Stil und Vorlage Ressourcen muss ein zusammengesetzten Schlüssel verwenden, die WPF erzählt die Baugruppe das Steuerelement enthält, dass der Stil/Vorlage gilt für . So sollte das vorherige Beispiel zu ändern:?.

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:uc="clr-namespace:MyApp.UserControls;assembly=MyApp"> 

    <!-- Standard look for MyUserControl in the MyApp assembly --> 
    <Style x:Key="{ComponentResourceKey {x:Type uc:MyUserControl}, Standard}"> 
    <Setter Property="Width" Value="22" /> 
    <Setter Property="Height" Value="10" /> 
    </Style> 

</ResourceDictionary> 
+0

die „gute Probe“ Link tot ist –

+0

@SvenHecht Danke für den Hinweis, dass aus entfernte ich den toten Link Referenz . –