2009-03-26 12 views
7

me he fijado un estilo para la ventana en el App.xaml como tales:¿Cómo puedo aplicar un estilo al control de ventanas en 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 qué Básicamente quiero todas las ventanas para tener su valor de la propiedad de WindowStyle establece en Ninguno (para quitar el marco de ventanas por defecto y la frontera); Pero no está funcionando.

¿Qué me falta aquí?

Respuesta

19

Creo que usted tiene que nombrar el estilo y aplicarlo a cada ventana como la siguiente ..

En App.xaml/recursos ..

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

Luego, en el 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}"> 

Esto debería funcionar, sino simplemente aplicar el estilo con TargetType de ventana en el recurso no obligará a la ventana para usar ese estilo, aunque parece que funciona para otros elementos.

Editar:
encontrado algo de información en relación con la aplicación de estilos por defecto a un elemento de ventana ..

Si proporciona un TargetType, todos instancias de ese tipo tendrá el estilo aplica. Sin embargo, los tipos derivados no ... parecerán. < Estilo TargetType = "{x: Type Window}"> no funcionará para todas sus derivaciones/ventanas personalizadas . < Estilo TargetType = "{x: Type local: MyWindow}"> se aplicará solo a MyWindow. Por lo que las opciones son

utilizar un estilo de llave que especifique como la propiedad de estilo de cada ventana que desea aplicar el estilo. El diseñador mostrará la ventana con estilo.

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

La persona que contestó la pregunta tenía una idea interesante sobre la herencia de una ventana de la base que tiene el estilo aplicado.

+0

Gracias por la visión –

7

Sé que esta pregunta es bastante antigua, pero responderé de todos modos.

Aquí está el código que funciona bien para mí en C# 4.0. Simplemente duplica el estilo de todas las subclases en el diccionario de recursos.

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

Ahora su estilo de App.xaml debería funcionar para todas las ventanas.

p.s. Sí, sé que esta no es la manera más limpia ni más rápida, pero funciona. :)

Cuestiones relacionadas