使用BasedOn更改控件属性

时间:2012-09-05 17:40:20

标签: c# wpf xaml

我有一个带有一些按钮的UserControl。我需要更改按钮的背景颜色,但保留所有其他属性和颜色,例如鼠标悬停事件

我使用了以下代码,我希望根据UniqueButton1定义{StaticResource {x:Type Button}}",但更改背景属性以定义我自己的颜色

<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的所有属性,以便构建自己的样式?

有人建议我可能需要建立自己的风格,这很好。但我需要匹配默认主题按钮的行为,除了背景属性 - 如果我看不出它是如何组成的,它似乎有点像捕获。

编辑:澄清事情

enter image description here

enter image description here

这两个图像显示3个按钮,你可以看到button3的mousover是橙色,蓝色是button2。你看不到的是动画速度也不同。基本上我希望我的按钮看起来像处于休息状态的button1和mouse3上的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属性,只将背景更改为粉红色。

1 个答案:

答案 0 :(得分:1)

BaseButtonx:Type更改为已命名的name,然后将BasedOn设置为其他人{{1}},这应该可以解决问题。