2009-03-26 23 views
7

Sto installando uno stile per la Finestra nella App.xaml come tale:Come posso applicare uno stile al Controllo finestre in 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> 

con cui fondamentalmente voglio ogni finestra di avere il valore della proprietà di WindowStyle impostata su None (per rimuovere il telaio di default di Windows e di frontiera); Ma non sta funzionando.

Cosa mi manca qui?

risposta

19

credo che bisogna dare un nome allo stile e applicarlo ad ogni finestra come la seguente ..

In app.xaml/risorse ..

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

Poi nel 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}"> 

Questo dovrebbe funzionare, ma semplicemente applicando lo stile con TargetType per finestra nella risorsa non costringerà la finestra per utilizzare questo stile, anche se sembra funzionare per altri elementi.

Edit:
Trovato alcune informazioni in relazione alla applicazione di stili di default per un elemento di finestra ..

Se si fornisce un TargetType, tutti le istanze di questo tipo avrà lo stile applicato. Tuttavia i tipi derivati ​​ non ... sembra. < Style TargetType = "{x: Type Window}"> non funzionerà con per tutte le derivazioni/finestre personalizzate . < Style TargetType = "{x: Tipo locale: MyWindow}"> si applica solo a MyWindow. Quindi le opzioni sono

utilizzare uno stile Keyed che si specifica come la proprietà Style di ogni finestra si desidera applicare lo stile. Il designer mostrerà la finestra in stile.

dalla questione: How to set default WPF Window Style in app.xaml?

La persona che ha risposto alla domanda ha avuto un'idea interessante di ereditare da una finestra di base che ha lo stile applicato.

+0

Grazie per l'intuizione –

7

So che questa domanda è abbastanza vecchia ma risponderò comunque.

Ecco il codice che funziona correttamente con C# 4.0. Duplica semplicemente lo stile per tutte le sottoclassi nel dizionario delle risorse.

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); 
    } 
} 

Ora il tuo stile da App.xaml dovrebbe funzionare per tutte le finestre.

p.s. Sì, so che questo non è il modo più pulito o veloce ma funziona. :)

Problemi correlati