如何设置从代码中应用了样式的按钮的背景颜色?

时间:2011-08-12 19:40:12

标签: c# wpf xaml button styles

所以我有一个应用了样式的按钮。按钮的代码是:

<Button Command="w:Command.ShowTBDisplay" Style="{DynamicResource button_displayOptions}" Content="Display TextBlock" Height="34.5" Margin="0,4,0,0" Name="btn_displayTB" />

单击该按钮时,我想要更改其背景颜色(永久更改,直到单击其他按钮)。我想要使​​用的颜色是dynamicResource ..

在ShowTBDisplay_Executed方法中,我有这样的代码:

btn_displayTB.Background = FindResource("cClickColor") as Brush;

但是当我这样做时,没有任何反应,没有设置颜色。

我认为Style的颜色会覆盖我尝试将其更改为......但我不确定。

那么我该如何更改应用了样式的按钮的backColor。

这是按钮的样式,以及我想要使用的颜色(两种样式都在app.xaml文件中):

<Style x:Key="button_displayOptions" TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Grid>
                        <Rectangle x:Name="rectangle" Fill="{DynamicResource cMenuBackground}"/>
                            <ContentPresenter x:Name="tb" TextBlock.Foreground="White" HorizontalAlignment="Left" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" Margin="8,5,0,5" Height="19.5"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsFocused" Value="True"/>
                            <Trigger Property="IsDefaulted" Value="True"/>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Fill" TargetName="rectangle" Value="{DynamicResource cMenuItemHighlight}"/>
                                <Setter Property="TextBlock.Foreground" TargetName="tb" Value="Black"/>
                            </Trigger>
                            <Trigger Property="IsPressed" Value="True"/>
                            <Trigger Property="IsEnabled" Value="False"/>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

<SolidColorBrush x:Key="cMenuItemHighlight">#FFAFAFAF</SolidColorBrush>

谢谢!

1 个答案:

答案 0 :(得分:4)

您的模板会覆盖默认模板,而Button的Background属性不再执行任何操作,您需要使用TemplateBinding将模板内的某些控件绑定到属性。

编辑:矩形在模板中不应具有具体的填充值,这可能是您想要的:

<Style x:Key="button_displayOptions" TargetType="{x:Type Button}">
    <Setter Property="Background" Value="{DynamicResource cMenuBackground}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Rectangle x:Name="rectangle" Fill="{TemplateBinding Background}" />
                    <ContentPresenter x:Name="tb" TextBlock.Foreground="White" HorizontalAlignment="Left"
                            RecognizesAccessKey="True"
                            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                            VerticalAlignment="Center" Margin="8,5,0,5" Height="19.5" />
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsFocused" Value="True" />
                    <Trigger Property="IsDefaulted" Value="True" />
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Fill" TargetName="rectangle"
                                Value="{DynamicResource cMenuItemHighlight}" />
                        <Setter Property="TextBlock.Foreground" TargetName="tb" Value="Black" />
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True" />
                    <Trigger Property="IsEnabled" Value="False" />
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

请注意新的SetterBackground设置为您的资源,将TemplateBinding设置为Rectangle.Fill