C# 如何设置按钮样式';s悬停并单击前景?

C# 如何设置按钮样式';s悬停并单击前景?,c#,wpf,button,styles,hover,C#,Wpf,Button,Styles,Hover,我不熟悉样式,不确定创建按钮样式以更改IsMouseOver和IsPressed的前景的最佳方法。我对模板使用了边框,因为它有拐角半径以及背景和边框属性。但是边框没有前景属性。使用按钮作为模板不起作用,因为默认外观没有被覆盖 使用前台行为设计按钮模板的更好方法是什么?也许在边界内使用标签 以下是App.xaml: <Application.Resources> <Style TargetType="Button" x:Key="MyButton">

我不熟悉
样式
,不确定创建
按钮
样式以更改
IsMouseOver和
IsPressed的
前景
的最佳方法。我对模板使用了
边框
,因为它有
拐角半径
以及背景和边框属性。但是
边框
没有
前景
属性。使用
按钮作为模板不起作用,因为默认外观没有被覆盖

使用
前台
行为设计
按钮
模板的更好方法是什么?也许在边界内使用标签

以下是App.xaml:

<Application.Resources>
    <Style TargetType="Button" x:Key="MyButton">
        <Setter Property="SnapsToDevicePixels" Value="true"/>
        <Setter Property="OverridesDefaultStyle" Value="true"/>
        <Setter Property="MinHeight" Value="34"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Name="shortcutbutton"  
                    BorderThickness="1"
                    BorderBrush="Black"
                    Background="Gray">
                        <ContentPresenter Margin="2" 
                                  HorizontalAlignment="Center"
                                  VerticalAlignment="Center" 
                                  RecognizesAccessKey="True"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter TargetName="shortcutbutton" Property="Background" Value="#FFDADADA" />
                            <Setter TargetName="shortcutbutton" Property="BorderBrush" Value="#EEEEEE" />
                            <!--<Setter TargetName="Border" Property="Foreground" Value="Black" />-->
                        </Trigger>
                        <Trigger Property="IsPressed" Value="true">
                            <Setter TargetName="shortcutbutton" Property="Background" Value="DarkGray" />
                            <Setter TargetName="shortcutbutton" Property="BorderBrush" Value="Black" />
                            <!--<Setter TargetName="Border" Property="Foreground" Value="Red" />-->
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Application.Resources>

以及xaml:

    <StackPanel HorizontalAlignment="Center" Height="100" VerticalAlignment="Center" Width="100">
        <Button Content="Button" Height="41" Style="{DynamicResource MyButton}"/>
    </StackPanel>

您可以在
边框上设置
TextElement
的附加属性,这样
边框中的每个文本元素都将是该颜色:

<ControlTemplate.Triggers>
   <Trigger Property="IsMouseOver" Value="true">
       <Setter TargetName="shortcutbutton" Property="Background" Value="#FFDADADA" />
       <Setter TargetName="shortcutbutton" Property="BorderBrush" Value="#EEEEEE" />
       <Setter TargetName="shortcutbutton" Property="TextElement.Foreground" Value="White"/>
   </Trigger>
   ...
</ControlTemplate.Triggers>

...

您需要将触发器从ControlTemplate移动到样式。大概是这样的:

        <Style TargetType="Button">
        <Setter Property="SnapsToDevicePixels" Value="true"/>
        <Setter Property="OverridesDefaultStyle" Value="true"/>
        <Setter Property="MinHeight" Value="34"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Name="shortcutbutton"  
                BorderThickness="1"
                BorderBrush="Black"
                Background="Gray">
                        <ContentPresenter Margin="2" 
                              HorizontalAlignment="Center"
                              VerticalAlignment="Center" 
                              RecognizesAccessKey="True"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
                <Setter Property="Foreground" Value="#FFDADADA" />
            </Trigger>
            <Trigger Property="IsPressed" Value="true">
                <Setter Property="Foreground" Value="DarkGray" />
            </Trigger>
        </Style.Triggers>
    </Style>

谢谢。这种方法似乎也有效。我发现dkozl的方法稍微简单一些。