首页 > 解决方案 > 为什么所有按钮在 WPF 中一次接收相同的状态?

问题描述

我有以下按钮样式:

    <Style TargetType="Button">
        <Setter Property="SnapsToDevicePixels" Value="true" />
        <Setter Property="FontFamily" Value="Roboto" />
        <Setter Property="MinHeight" Value="{StaticResource ButtonMinHeight}" />
        <Setter Property="MinWidth" Value="{StaticResource ButtonMinWidth}" />
        <Setter Property="Padding" Value="{StaticResource ButtonPadding}" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border x:Name="bMain" 
                            CornerRadius="{StaticResource ButtonCornerRadius}" 
                            BorderThickness="{StaticResource ButtonBorderThickness}" 
                            BorderBrush="Transparent" 
                            Background="{StaticResource ButtonBackgroundBrush}"
                            TextBlock.Foreground="{StaticResource ButtonForegroundBrush}">
                        <ContentPresenter Margin="{TemplateBinding Padding}"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            RecognizesAccessKey="True" />
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal" />
                                <VisualState x:Name="MouseOver">
                                    <Storyboard>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetName="bMain" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
                                            <DiscreteColorKeyFrame KeyTime="0" Value="{StaticResource ButtonHoverBackgroundColor}" />
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Pressed">
                                    <Storyboard>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetName="bMain" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
                                            <DiscreteColorKeyFrame KeyTime="0" Value="{StaticResource ButtonDownBackgroundColor}" />
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Disabled">
                                    <Storyboard>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetName="bMain" Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)">
                                            <DiscreteColorKeyFrame KeyTime="0" Value="{StaticResource ButtonDisabledForegroundColor}" />
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                    </Border>

                    <ControlTemplate.Triggers>
                        <Trigger Property="IsDefault" Value="True">
                            <Setter TargetName="bMain" Property="BorderBrush" Value="{StaticResource ButtonBorderBrush}" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

另外,我有两个按钮:

<Button Grid.Column="1" Command="{Binding LogCommand}" Content="{x:Static r:Strings.Main_Button_Log}" Margin="0,0,24,0"/>
<Button Grid.Column="2" Command="{Binding CloseCommand}" Content="{x:Static r:Strings.Main_Button_Close}" />

问题是它们似乎同时接收到相同的状态。

普通的:

正常状态

悬停(在其中之一上):

在此处输入图像描述

如果图像不够清晰,则在第二张中,两个按钮都被突出显示,而不是只有一个。压制的情况相同。

我怎样才能解决这个问题?

标签: c#.netwpfwpf-style

解决方案


推荐阅读