2009-03-10 8 views
4

Je souhaite définir la propriété d'arrière-plan de tous les contrôles userc de mon projet.WPF UserControl Style

J'ai essayé avec

<style TargetType={x:Type UserControl}> 
    <setter property="Background" Value="Red" /> 
</style> 

Il compile mais ne fonctionne pas.

¿Une idée? Merci!

+0

Quelle était l'erreur de compilation? –

Répondre

2

Je pense que vous manquez des guillemets doubles:

Essayez ceci:

<Window.Resources> 
    <Style TargetType="{x:Type UserControl}"> 
     <Setter Property="Background" Value="Red" /> 
    </Style> 
</Window.Resources> 
<Grid> 
    <UserControl Name="control" Content="content"></UserControl> 
</Grid> 
21

Vous ne pouvez définir aa style à une classe spécifique, donc cela fonctionnera (créer un objet UserControl, non très utile):

<Window.Resources> 
    <Style TargetType="{x:Type UserControl}"> 
     <Setter Property="Background" Value="Red" /> 
    </Style> 
</Window.Resources> 
<Grid> 
    <UserControl Name="control" Content="content"></UserControl> 
</Grid> 

Mais cela ne veut pas (Créer une classe dérivée de UserControl):

<Window.Resources> 
    <Style TargetType="{x:Type UserControl}"> 
     <Setter Property="Background" Value="Red" /> 
    </Style> 
</Window.Resources> 
<Grid> 
    <l:MyUserControl Name="control" Content="content"></l:MyUserControl> 
</Grid> 

Qu'est-ce que vous pouvez faire est soit explicitement définir le style en utilisant la propriété Style:

<Window.Resources> 
    <Style TargetType="{x:Type UserControl}" x:Key="UCStyle"> 
     <Setter Property="Background" Value="Red" /> 
    </Style> 
</Window.Resources> 
<Grid> 
    <l:MyUserControl Name="control" Content="content" Style="{StaticResource UCStyle}"></l:MyUserControl> 
</Grid> 

ou créer un style pour chaque classe dérivée, vous pouvez utiliser BasedOn pour éviter de dupliquer le contenu de style:

<Window.Resources> 
    <Style TargetType="{x:Type UserControl}" x:Key="UCStyle"> 
     <Setter Property="Background" Value="Red" /> 
    </Style> 
    <Style TargetType="{x:Type l:MyUserControl}" BasedOn="{StaticResource UCStyle}" /> 
</Window.Resources> 
<Grid> 
    <l:MyUserControl Name="control" Content="content"></l:MyUserControl> 
</Grid> 
+0

Voici les deux options disponibles pour le style dans WPF. –

+0

pourquoi l'extension x: markup? TargetType = "UserControl" fonctionne pour moi .. – markmnl

+0

@ Fëanor - x: Le type est parfois optionnel – Nir