【发布时间】:2018-10-07 08:25:15
【问题描述】:
我有一个带有几个按钮的 StackPanel。我想在单击时更改按钮的颜色,并在单击 StackPanel 中的另一个按钮时将其重置为原始颜色。是否可以在 StackPanel 上应用单一样式,或者我必须为每个按钮创建样式?如果是,那么如何。
这是应用于 StackPanel 的样式代码,但这会更改按钮的颜色,但不会在单击另一个按钮时重置它。
<Style TargetType="StackPanel" x:Key="GlobalStackPanelStyle" BasedOn="{StaticResource FlatStackPanel}">
<Style.Resources>
<Style TargetType="Button">
<Setter Property="Button.Background" Value="Blue"/>
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" To="Green"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</Style.Resources>
</Style>
【问题讨论】:
-
嗨,我对您的陈述有点困惑 - “我想在单击时更改按钮的颜色,并在单击 StackPanel 中的另一个按钮时将其重置为原始颜色” - 你的意思是第一个按钮应该回到它自己的颜色和第二个按钮到 等等......?
-
或者只是第一个按钮重置为自己的颜色并让其他按钮保持原样?如果您的问题是我的第二个陈述,那么您可以使用 ViewModel 中的 bool 属性轻松完成此操作,然后创建一个数据触发器并根据值(真/假)更改第一个按钮的颜色。因此,每次单击按钮时,您都需要切换布尔属性值。
-
有一种颜色表示按钮处于活动状态,另一种颜色表示按钮处于非活动状态。所有按钮最初都是非活动颜色。因此,如果单击第一个按钮,则其颜色应更改为活动颜色,当单击另一个按钮时,第一个按钮的颜色更改为非活动颜色,第二个按钮的颜色更改为活动颜色。