如何改变点击任何一个按钮的背景颜色?
问题描述:
我有3个按钮。我创建了一个用于所有三个按钮的样式,以显示MouseOver和Pressed状态。我需要逻辑来指示哪个按钮被选中/点击。如果按钮被点击,那么背景颜色应该保持为按下状态,而其他两个按钮应该被重置为背景颜色以作为正常状态。以下是我的代码。我想知道是否有可能在XAML中实现所有功能,或者如何在代码中实现它?谢谢,我提前。如何改变点击任何一个按钮的背景颜色?
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="test3.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Window.Resources>
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" SnapsToDevicePixels="true" Background="#FFFFE640">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground">
<EasingColorKeyFrame KeyTime="0" Value="#FFC8B432"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground">
<EasingColorKeyFrame KeyTime="0" Value="#FFBCAA31"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ContentPresenter RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,0,0,4" HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsKeyboardFocused" Value="true">
</Trigger>
<Trigger Property="ToggleButton.IsChecked" Value="true">
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#ADADAD"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Storyboard x:Key="OnMouseOneEnter">
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="button_One">
<EasingColorKeyFrame KeyTime="0" Value="#FFDAC326"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="OnMouseOneLeave">
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="button_One">
<EasingColorKeyFrame KeyTime="0" Value="#FFFFE640"/>
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="button_Two">
<EasingColorKeyFrame KeyTime="0" Value="#FF85781C"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="OnMoseOneClick">
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="button_One">
<EasingColorKeyFrame KeyTime="0:0:0.2" Value="#FFDAC326"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Grid>
<StackPanel x:Name="LayoutRoot">
<Button x:Name="button_One" HorizontalAlignment="Left" Width="90" Height="90" Content="One" Style="{DynamicResource ButtonStyle1}" Cursor="Hand" Margin="0,0,0,4" />
<Button x:Name="button_Two" HorizontalAlignment="Left" Width="90" Height="90" Content="Two" Style="{DynamicResource ButtonStyle1}" Cursor="Hand" Margin="0,0,0,4" />
<Button x:Name="button_Three" HorizontalAlignment="Left" Width="90" Height="90" Content="Two" Style="{DynamicResource ButtonStyle1}" Cursor="Hand" Margin="0,0,0,4" />
</StackPanel>
</Grid>
答
切换按钮?创建一个由两个按钮组成的切换按钮用户控件。一开始隐藏。当您单击可见的人物时,隐藏它并显示隐藏的人物。然后,您还可以在OnClick事件中隐藏/显示其他按钮。
+0
在我的情况下,我不能使用切换按钮。是否有可能通过单击一个按钮来控制每个按钮的背景颜色值? – vladc77 2010-12-04 19:45:20
答
你可以改变它使用“IsFocused” PROPERT,“IsPressed”
谢谢。我会尝试。 – vladc77 2010-12-05 05:40:28