需要帮助覆盖WPF按钮样式背景颜色.

Jim*_*Del 5 wpf xaml

我为自定义按钮设置了以下代码.但我想改变单个按钮的背景.

<Style x:Key="myButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="White"/>
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type Button}">
            <Grid>
                <Rectangle x:Name="rectangle" Fill="#FF2F2FEA" Stroke="Black">
                    <Rectangle.Effect>
                        <DropShadowEffect ShadowDepth="3"/>
                    </Rectangle.Effect>
                </Rectangle>
                <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Bottom" Margin="2.833,0,2.5,1.162" RenderTransformOrigin="0.5,0.5" Width="69.667"/>
            </Grid>
        </ControlTemplate>
    </Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)

下面的代码旨在覆盖背景颜色,但不是.我错过了什么?谢谢

<Style x:Key="SpecialButton" TargetType="Button" BasedOn="{StaticResource myButtonStyle}">
   <Setter Property="Background" Value="PaleGreen" />
   <Setter Property="Height" Value="19.96" />
</Style>
Run Code Online (Sandbox Code Playgroud)

Sza*_*zsi 8

添加<Setter Property="Background" Value="#FF2F2FEA" />myButtonStyle.而改变FillRectangle,以Fill="{TemplateBinding Background}"

<Style x:Key="myButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="Background" Value="#FF2F2FEA" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Rectangle x:Name="rectangle" Fill="{TemplateBinding Background}" Stroke="Black">
                        <Rectangle.Effect>
                            <DropShadowEffect ShadowDepth="3"/>
                        </Rectangle.Effect>
                    </Rectangle>
                    <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                    RecognizesAccessKey="True" 
                                    SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                                    VerticalAlignment="Bottom" 
                                    Margin="2.833,0,2.5,1.162" 
                                    RenderTransformOrigin="0.5,0.5" Width="69.667"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

在此之后,两个Buttons应该正确显示.

<StackPanel>
    <Button Content="BASE" Style="{StaticResource myButtonStyle}"></Button>

    <Button Content="DERIVED" Style="{StaticResource SpecialButton}"></Button>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

结果:

结果

说明:如果更改TemplateControl,你必须"线式"它的属性(如Background,Foreground,HorizontalContentAlignment等)在元素的属性ControlTemplate.毕竟你想让控件的最终用户能够修改颜色,对齐等,而不仅仅是拥有Control静态可视树.