2009-03-10 16 views
4

Ich möchte die Hintergrund-Eigenschaft aller Benutzersteuerelemente meines Projekts festlegen.WPF UserControl Style

Ich habe versucht, mit

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

Es kompiliert, aber hat nicht funktioniert.

¿Irgendeine Idee? Danke!

+0

Was war der Kompilierungsfehler? –

Antwort

2

Ich glaube, Sie einige doppelte Anführungszeichen sind vermisst:

Versuchen Sie folgendes:

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

Sie können nur aa Stil auf eine bestimmte Klasse festgelegt, so dass dies funktionieren wird (ein Usercontrol-Objekt erstellen, nicht sehr nützlich):

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

Aber dies nicht (erstellen Sie eine Klasse von Usercontrol abgeleitet):

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

Was Sie tun können, ist entweder explizit den Stil mit dem Stil-Eigenschaft:

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

oder einen Stil für jede abgeleitete Klasse erstellen, können Sie BasedOn verwenden den Stil Inhalt zu vermeiden Duplizieren:

<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

Das sind die zwei Optionen, die für das Stylen in WPF vorhanden sind. –

+0

Warum die Erweiterung x: markup? TargetType = "UserControl" funktioniert für mich .. – markmnl

+0

@ Feanor - x: Typ ist manchmal optional – Nir