WPF点击按钮时更改背景色

5
我有一组按钮在侧面板上。我想要改变被点击的按钮的背景颜色。我试过使用style.trigger,但我只能想到IsPressed这个属性,但是它并没有什么帮助,因为它只会改变背景颜色一瞬间(当然,直到按钮被按下)。以下是我尝试过的代码:
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
    <Setter Property="Background" Value="SlateGray" />
    <Setter Property="Foreground" Value="White"></Setter>
</Trigger>
</Style.Triggers>

我能想到的另一种方法是使用datatrigger为每个按钮创建单独的样式,因为随着按钮的选择,我有一个改变的属性,但那似乎有点过头了。你有什么办法可以突出显示已点击的按钮吗?

2个回答

13

当您的条件满足时,此触发器就会运行,然后效果消失。如果要永久设置而不是暂时设置,请查看此内容。

<Button Content="Content" Background="Red">
        <Button.Triggers>
            <EventTrigger RoutedEvent="MouseEnter">
                <BeginStoryboard>
                    <Storyboard>
                        <ColorAnimation Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" To="CadetBlue"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>

由于IsPressed不是一个路由事件,因此您可以使用此方法。

 <Button Content="Content" Background="Red">
        <Button.Style>
            <Style TargetType="Button">
                <Style.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Trigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" To="CadetBlue"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.EnterActions>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

1
+1,除非OP可能想要“点击”而不是“MouseEnter”。 - McGarnagle
1
IsPressed不是一个路由事件,等一下我会更新。 - Maximus
1
可以工作。虽然有一些动画,但我们可以摆脱它。但是当选择其他按钮时,我还必须“取消”背景。因此,我最终创建了每个单独按钮的样式,直到找到更好的解决方案。 - SZT
2
您可以为所有按钮创建一个样式,或者将一个样式应用于多个按钮,而不是在每个按钮中创建新的样式。 - Maximus

0
<UserControl.Resources>
    <Style TargetType="{x:Type Button}">
        <Setter Property="Background" Value="Green"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Background="{TemplateBinding Background}" BorderBrush="Black" BorderThickness="1">
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Background" Value="Red"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>
<Grid RenderTransformOrigin="0.578,0.503">
    <Button Width="100" Height="50" Margin="265,265,435,135"/>
    <Button Height="50" Margin="400,202,302,198"/>
</Grid>

3
虽然这段代码片段可能解决了问题,但是包括解释真的有助于提高您的帖子质量。请记住,您正在为未来的读者回答问题,而这些人可能不知道您的代码建议的原因。 - Gerhard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接