2012-07-13 71 views
0

我有以下的ResourceDictionary:如何共享WPF風格二傳手

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style x:Key="StyleComboBox" TargetType="{x:Type ComboBox}"> 
     <Setter Property="BorderBrush" Value="DarkGray" /> 
     <Setter Property="BorderThickness" Value="1" /> 
     <!-- Styles for ComboBox --> 
    </Style> 
    <Style x:Key="StyleTextBox" TargetType="{x:Type TextBox}"> 
     <Setter Property="BorderBrush" Value="DarkGray" /> 
     <Setter Property="BorderThickness" Value="1" /> 
     <!-- Styles for Textbox --> 
    </Style> 
</ResourceDictionary> 

怎麼可能只在一個位置二傳手使用?

回答

2

wpf中的樣式可以從另一種樣式繼承。

<Style x:Key="baseStyle" TargetType="TextBlock"> 
    <Setter Property="FontSize" Value="12" /> 
     <Setter Property="Background" Value="Orange" /> 
</Style> 


<Style x:Key="boldStyle" BasedOn="{StaticResource baseStyle}" TargetType="TextBlock"> 
    <Setter Property="FontWeight" Value="Bold" /> 
</Style> 

source

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
     <Style x:Key="baseStyle" TargetType="Control"> 
      <Setter Property="BorderBrush" Value="DarkGray" /> 
      <Setter Property="BorderThickness" Value="1" /> 
     </Style> 

     <Style x:Key="StyleComboBox" BasedOn="{StaticResource baseStyle}" TargetType="{x:Type ComboBox}"> 

      <!-- Styles for ComboBox --> 
     </Style> 
     <Style x:Key="StyleTextBox" BasedOn="{StaticResource baseStyle}" TargetType="{x:Type TextBox}"> 

      <!-- Styles for Textbox --> 
     </Style> 
    </ResourceDictionary> 
+0

該OP有兩個不同的'TargetType' – 2012-07-13 06:43:46

+0

這是一個怎麼樣的問題?只需將基礎樣式的目標類型設置爲控件。 – Rafal 2012-07-13 06:59:23

+0

@Rafal如何分享更多不同的setters? – David 2012-07-13 07:05:44

1
<Style TargetType="Control" x:Key="Controlbase"> 
     <Setter Property="Control.BorderThickness" Value="10"/> 
    </Style> 
    <Style x:Key="StyleComboBox" TargetType="{x:Type ComboBox}" BasedOn="{StaticResource Controlbase}"> 
     <Setter Property="BorderBrush" Value="DarkGray" /> 
     <!-- Styles for ComboBox --> 
    </Style> 
    <Style x:Key="StyleTextBox" TargetType="{x:Type TextBox}" BasedOn="{StaticResource Controlbase}"> 
     <Setter Property="BorderBrush" Value="DarkGray" /> 
     <!-- Styles for Textbox --> 
    </Style> 

我希望這將有助於。

0

好奇,如果這爲你工作。需要小心,因爲您基於Control基礎風格重新定義了ComboBox的風格。據推測控制模板不受此影響,因爲這將是不好的。 IOW ComboBox不僅僅是一個簡單的控件,而且需要繼承這些樣式並保留控制模板,這意味着它是一個ComboBox。 IE它是一個SelectorControl繼承自ItemsControl等

我不知道是否重定義其風格也會導致它喜歡/使用控件的默認控制模板,而不是保留其「身份」作爲一個組合框。