2009-03-10 9 views
4

Я хочу установить свойство фона для всех пользовательских элементов моего проекта.WPF UserControl Style

Я попытался с

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

Он компилирует, но не работал.

¿Любая идея? Спасибо!

+0

Какая ошибка компиляции? –

ответ

2

Я думаю, что вы пропустили некоторые двойные кавычки:

Попробуйте это:

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

Вы можете установить только аа стиль к определенному классу, так что это будет работать (создать объект UserControl, не очень полезно):

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

Но это не (Создать класс, производный от 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> 

Что вы можете сделать, это либо явно задать стиль, используя свойство 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> 

или создать стиль для каждого производного класса, вы можете использовать BasedOn, чтобы избежать дублирования контента стиля:

<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

Это два варианта, которые существуют для стилизации в WPF. –

+0

Почему расширение x: расширение? TargetType = «UserControl» работает для меня .. – markmnl

+0

@ Fëanor - x: Тип иногда необязательный – Nir