2009-02-23 15 views
8

¿Cómo puedo crear un UserControl en WPF que tenga un estilo básico predeterminado pero que también se pueda personalizar fácilmente cuando sea necesario?Themable User Controls en WPF

¿Tiene algunas buenas pautas, entradas de blog o ejemplos que expliquen este tema específico?

gracias de antemano, Marco

Respuesta

7

En temas de WPF son simplemente un conjunto de XAML archivos que contienen cada uno un ResourceDictionary que mantiene el estilo y Plantilla las definiciones que se aplican a los controles que se utilizan en la aplicación. Un archivo de tema podría tener este aspecto:

<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> 

soporte para temas en una aplicación WPF debe estar habilitado explícitamente añadiendo el siguiente atributo a la asamblea:

[assembly: ThemeInfo(
    ResourceDictionary.None, 
    ResourceDictionaryLocation.SourceAssembly 
)] 

Esto le dará instrucciones WPF para buscar un recurso incrustado archivo llamado themes \ generic.xaml para determinar el aspecto predeterminado de los controles de la aplicación.

Nótese que cuando la diccionarios temas específicos están contenidos en archivos separados de recursos de montaje, de estilo y de la plantilla de la aplicación debe utilizar un compuesto clave, que dice WPF cuyo conjunto contiene el control que el estilo/plantilla se aplica a . Así que el ejemplo anterior se debe modificar para:?.

<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

la "buena muestra" enlace está muerto –

+0

@SvenHecht Gracias por señalarlo me quita la referencia vínculo roto . –