我有一個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。
編輯:爲了澄清事情
這兩個圖像顯示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屬性並只將背景更改爲粉紅色。
所以你說'UniqueButton1'風格修改了默認的WPF按鈕的背景,而不是修改你的主題的按鈕樣式的背景? – Jay
@Jay - 我已經更新了我的Q以嘗試讓事情更清晰 – user3357963
基本上,您有一個按鈕主題,並且您想要擴展按鈕1和2的默認樣式?我不明白。你還提到你想要繼承button1的所有狀態,並在button3上繼承mouseover。 –