2012-09-05 80 views
0

我有一個UserControl和一些按鈕。我需要更改按鈕的背景顏色,但保留所有其他屬性和顏色,如鼠標懸停事件使用BasedOn更改控件屬性

我用下面的代碼,我希望這將定義基於{StaticResource {x:Type Button}}"UniqueButton1但改變背景屬性來定義自己的顏色

<UserControl x:Class="Project.Detail" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="30" d:DesignWidth="800" BorderBrush="#FF5380E7" BorderThickness="0,0,0,1" xmlns:my="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"> 
    <UserControl.Resources> 
     <Style x:Key="UniqueButton1" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" > 
      <Setter Property="Background"> 
       <Setter.Value> 
       <LinearGradientBrush EndPoint="0,1"> 
        <GradientStop Color="#FFF896CE" Offset="0" /> 
        <GradientStop Color="#FFF788C7" Offset="0.5" /> 
        <GradientStop Color="#FFF570BB" Offset="0.5" /> 
        <GradientStop Color="#FFF353AE" Offset="1" /> 
       </LinearGradientBrush> 
      </Setter.Value> 
      </Setter> 
     </Style> 
    </UserControl.Resources> 
    <Grid Height="30" Width="800"> 
     <Button Height="30" HorizontalAlignment="Left" Margin="360,0,0,0" Name="button2" VerticalAlignment="Top" Width="50" Click="b_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10" FontStretch="SemiCondensed" /> 
     <Button Style="{StaticResource UniqueButton1}" Height="30" HorizontalAlignment="Left" Margin="423,0,0,0" Name="button1" VerticalAlignment="Top" Width="50" Click="b_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10" FontStretch="SemiCondensed" /> 
    </Grid> 
</UserControl> 

這樣的工作,在我得到的背景顏色,我需要的方式,但UniqueButton1我在<UserControl.Resources>已經定義不是基於沒有應用樣式更改其他默認按鈕2。例如背景,顏色,動畫速度等都不同

也許是因爲我也在應用主題?

我的問題要麼是 1.如何定義基於默認button2且應用主題的資源? 或 2.如何獲取應用主題的button2的所有屬性,以便構建自己的樣式?

有人建議我可能需要建立自己的風格,這很好。但是我需要匹配除了背景屬性之外的默認主題按鈕的行爲 - 如果我看不到它是如何組成的,那麼它看起來有點像catch22。

編輯:爲了澄清事情

enter image description here

enter image description here

這兩個圖像顯示3個按鈕,就可以看到mousover爲BUTTON3是橙色和藍色的按鈕2。你看不到的是動畫速度也不同。基本上我想讓我的按鈕看起來像休息狀態下的button1和mouseover上的button3,同時保留button3動畫速度和其他屬性。 Button2是我正在使用的基礎,沒有進一步的屬性更改。

將Button3產生沒有資源和XAML

<Button Height="30" HorizontalAlignment="Left" Margin="360,0,0,0" VerticalAlignment="Top" Width="50" Click="button_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10" FontStretch="SemiCondensed"/> 

Button2的使用

<UserControl.Resources> 
     <Style x:Key="TEST1" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" > 
     </Style> 
</UserControl.Resources> 

<Button Style="{StaticResource TEST1}" Height="30" HorizontalAlignment="Left" Margin="360,0,0,0" VerticalAlignment="Top" Width="50" Click="button_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10" FontStretch="SemiCondensed"/> 

Button1的產生不是基於產生使用

<UserControl.Resources> 
     <Style x:Key="UniqueButton1" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" > 
      <Setter Property="Background"> 
       <Setter.Value> 
       <LinearGradientBrush EndPoint="0,1"> 
        <GradientStop Color="#FFF896CE" Offset="0" /> 
        <GradientStop Color="#FFF788C7" Offset="0.5" /> 
        <GradientStop Color="#FFF570BB" Offset="0.5" /> 
        <GradientStop Color="#FFF353AE" Offset="1" /> 
       </LinearGradientBrush> 
      </Setter.Value> 
      </Setter> 
     </Style> 
    </UserControl.Resources> 

<Button Style="{StaticResource UniqueButton1}" Height="30" HorizontalAlignment="Left" Margin="360,0,0,0" VerticalAlignment="Top" Width="50" Click="button_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10" FontStretch="SemiCondensed" /> 

所以,很顯然按鈕1和2在button3上,這是我想要的。我想克隆button3屬性並只將背景更改爲粉紅色。

+0

所以你說'UniqueButton1'風格修改了默認的WPF按鈕的背景,而不是修改你的主題的按鈕樣式的背景? – Jay

+0

@Jay - 我已經更新了我的Q以嘗試讓事情更清晰 – user3357963

+0

基本上,您有一個按鈕主題,並且您想要擴展按鈕1和2的默認樣式?我不明白。你還提到你想要繼承button1的所有狀態,並在button3上繼承mouseover。 –

回答

1

BaseButtonx:Type更改爲指定名稱,然後將其設置爲name其他BasedOn,這應該可以做到。

相關問題