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

时间:2016-01-26 21:33:20

标签: 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>

以下代码旨在覆盖背景颜色,但不是。我错过了什么?感谢

<Style x:Key="SpecialButton" TargetType="Button" BasedOn="{StaticResource myButtonStyle}">
   <Setter Property="Background" Value="PaleGreen" />
   <Setter Property="Height" Value="19.96" />
</Style>

1 个答案:

答案 0 :(得分:8)

<Setter Property="Background" Value="#FF2F2FEA" />添加到myButtonStyle。并将Fill上的Rectangle更改为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>

在此之后,两个Button应该正确显示。

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

    <Button Content="DERIVED" Style="{StaticResource SpecialButton}"></Button>
</StackPanel>

结果:

result

说明:如果您更改了Template的{​​{1}},则需要更新&#34;电话连接&#34;它的属性(如ControlBackgroundForeground等)到HorizontalContentAlignment中元素的属性。毕竟,您希望能够让控件的最终用户修改颜色,对齐等,而不仅仅是拥有静态可视树的ControlTemplate