2009-03-26 5 views
7

Je suis en train un style pour la fenêtre dans le App.xaml comme tel:Comment puis-je appliquer un style au contrôle de fenêtre dans WPF?

<Application x:Class="MusicRepo_Importer.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib" StartupUri="TestMaster.xaml"> 
    <Application.Resources> 

     <Style TargetType="Window"> 
      <Setter Property="WindowStyle" Value="None"></Setter> 
     </Style> 

    </Application.Resources> 
</Application> 

avec lequel je veux essentiellement toutes les fenêtres pour avoir sa valeur de la propriété de WindowStyle définie sur None (pour supprimer les fenêtres par défaut cadre et frontière); Mais ça ne fonctionne pas.

Qu'est-ce qui me manque ici?

Répondre

19

Je crois que vous devez nommer le style et l'appliquer à chaque fenêtre comme ce qui suit ..

Dans app.xaml/ressources ..

<Style x:Key="MyWindowStyle" TargetType="Window"> 
    <Setter Property="WindowStyle" Value="None"></Setter> 
</Style> 

Ensuite, dans le window.xaml ..

<Window x:Class="MusicRepo_Importer.MyWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    Title="MyStyledWindow" Style="{StaticResource MyWindowStyle}"> 

Cela devrait fonctionner, mais en appliquant simplement le style avec TargetType pour la fenêtre de la ressource ne sera pas forcer la fenêtre à utiliser ce style bien qu'il semble fonctionner pour d'autres éléments.

Edit:
trouvé quelques informations par rapport à l'application de styles par défaut à un élément de fenêtre ..

Si vous fournissez un TargetType, toutes instances de ce type aura le style appliqué. Cependant les types dérivés ne sembleront pas ... il semble. < Style TargetType = "{x: Type Fenêtre}"> ne fonctionnera pas pour toutes vos dérivations/fenêtres personnalisées . < Style TargetType = "{x: Type local: MyWindow}"> ne s'applique qu'à MyWindow. Ainsi, les options sont

Utilisez un style détrompeur que vous spécifiez comme la propriété Style de chaque fenêtre que vous voulez appliquer le style. Le designer montrera la fenêtre de style.

de la question: How to set default WPF Window Style in app.xaml?

La personne qui a répondu à la question avait une idée intéressante sur héritant d'une fenêtre de base qui a le style appliqué.

+0

Merci pour la perspicacité –

7

Je sais que cette question est assez ancienne mais je vais répondre quand même.

Voici le code qui fonctionne bien pour moi en C# 4.0. Il duplique simplement le style pour toutes les sous-classes du dictionnaire de ressources.

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     if (this.Resources.Contains(typeof(Window))) 
     { 
      var types = Assembly.GetEntryAssembly().GetTypes(); 
      var subTypes = types.Where(x => x.IsSubclassOf(typeof(Window))); 

      Style elementStyle = (Style)this.Resources[typeof(Window)]; 

      foreach (Type subType in subTypes) 
      { 
       if (!this.Resources.Contains(subType)) 
       { 
        this.Resources.Add(subType, elementStyle); 
       } 
      } 
     } 

     base.OnStartup(e); 
    } 
} 

Maintenant votre style de App.xaml devrait fonctionner pour toutes les fenêtres.

p.s. Oui, je sais que ce n'est pas le moyen le plus propre ou le plus rapide, mais ça marche. :)

Questions connexes