Style par defaut Generic.xaml

De Banane Atomic
Version datée du 29 octobre 2019 à 10:15 par Nicolas (discussion | contributions) (Nicolas a déplacé la page Themes/Generic.xaml vers Style par defaut Generic.xaml)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche

Description

Permet de définir un style par défaut pour les custom controls.

Thèmes WPF sur NuGet

Paquets NuGet Thèmes
MahApps.Metro BaseLight, BaseDark
Red, Green, Blue, Purple, Orange, Lime, Emerald, Teal, Cyan, Cobalt, Indigo, Violet, Pink, Magenta, Crimson, Amber, Yellow, Brown, Olive, Steel, Mauve, Taupe, Sienna
Wpf.Themes BureauBlack, BureauBlue, ExpressionDark, ExpressionLight, ShinyBlue, ShinyRed, WhistlerBlue
Infragistics.Themes.* MetroDark, MetroLight, IG, Office2013, Office2010Blue
WPFThemes.DarkBlend DarkBlend
Xceed.Products.Wpf.Toolkit.Base.Themes

Generic.xaml

Il est le dictionnaire générique de l'assemblage, et doit se trouver dans un dossier nommé Themes, qui lui est à la racine du projet.
Il pourra donc contenir les thèmes par défaut des UserControl de l'assemblage.

Xaml.svg
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Style TargetType="MonUserControl">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="MonUserControl">
                    ...
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</ResourceDictionary>

Assembly.cs

Dans les propriétés du projet, on peut spécifier où doivent être chercher le dictionnaire générique et le dictionnaire de ressources de thème.
On peut donc définir le dictionnaire générique dans l'assemblage courant ou dans un autre assemblage.

Cs.svg
[assembly: ThemeInfo(
    // là où se trouve le dictionnaire de ressources de thème: ici pas de dictionnaire de ressources de thème
    ResourceDictionaryLocation.None,
    // là où se trouve le dictionnaire générique: dans l'assemblage courant
    ResourceDictionaryLocation.SourceAssembly
)]

Constructeur statique

MyUserControl.cs
public class MyUserControl : TextBox
{
    static MyUserControl()
    {
        DefaultStyleKeyProperty.OverrideMetadata(
            typeof(MyUserControl),
            new FrameworkPropertyMetadata(typeof(MyUserControl)));
    }