2016-06-28 24 views
1

我有這些控件:XAML局部造型?

<Border Style="{StaticResource Button}">     
    <TextBlock>NEW</TextBlock> 
</Border> 
<Border Style="{StaticResource Button}"> 
    <TextBlock>CLOSE</TextBlock> 
</Border> 
<Border Style="{StaticResource Button}"> 
    <TextBlock>EXIT</TextBlock> 
</Border> 

而且這一款式:

<Style x:Key="Button" TargetType="{x:Type Border}"> 
    <Setter Property="Padding" Value="15, 10" /> 
    <Setter Property="Margin" Value="5, 0" /> 
    <Setter Property="MinWidth" Value="150" /> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Cursor" Value="Hand" />     
     </Trigger> 
    </Style.Triggers> 
    <Style.Resources> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="VerticalAlignment" Value="Center" /> 
     </Style> 
    </Style.Resources>   
</Style> 

我想每個按鈕/邊框設置爲特定的,不同顏色的每個,以及另一種顏色IsMouseOver。

我試着在控件上設置Background,但是樣式不能覆蓋背景,我不能做IsMouseOver的更改。 我只能想到用它們的顏色爲每個人創建不同的風格,但無論如何要做一個部分樣式,就像你在CSS中做的一樣?

<div class="button blue">NEW</div> 
<div class="button red">CLOSE</div> 
<div class="button gray">EXIT</div> 

或者其他任何方式來實現這一目標?

回答

2

我有一段時間沒有做過任何XAML,所以我有點生鏽。我敢肯定,你不能做部分樣式,但我知道你可以使用「BasedOn」繼承樣式。

https://msdn.microsoft.com/en-us/library/system.windows.style.basedon(v=vs.110).aspx

這將允許你做你的基礎按鈕樣式,然後創建你需要基於共同的風格特點各顏色的顏色變異。

<Style x:Key="Button" TargetType="{x:Type Border}"> 
    <Setter Property="Padding" Value="15, 10" /> 
    <Setter Property="Margin" Value="5, 0" /> 
    <Setter Property="MinWidth" Value="150" /> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Cursor" Value="Hand" />     
     </Trigger> 
    </Style.Triggers> 
    <Style.Resources> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="VerticalAlignment" Value="Center" /> 
     </Style> 
    </Style.Resources>   
</Style> 

<Style x:Key="ButtonBlue" TargetType="{x:Type Border}" BasedOn="{StaticResource Button}"> 
    <Setter Property="Background" Value="Blue" /> 
</Style> 

類似的東西,然後你用「ButtonBlue」而不是「按鈕」,只要您的XAML引用了要爲藍色控件的靜態資源。您應該能夠在繼承樣式中添加觸發器。希望我能正確記住我的語法。

此外,您可能希望將樣式鍵更改爲「Button」以外的其他值。可能有點混亂。