【问题标题】:How To Style Button's Hover And Click Foreground?如何样式按钮悬停并单击前景?
【发布时间】:2013-06-10 00:31:10
【问题描述】:

我是Styles 的新手,不确定创建Button 样式以更改IsMouseOverIsPressedForeground 的最佳方法。我使用Border 作为模板,因为它具有CornerRadius 以及背景和边框属性。但是Border 没有Foreground 属性。使用Button 作为模板效果不佳,因为默认外观没有被覆盖。

Foreground 行为设置Button 模板样式的更好方法是什么?也许在边框内使用标签?

这是 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>

【问题讨论】:

    标签: c# wpf button styles hover


    【解决方案1】:

    您需要将触发器从 ControlTemplate 移动到 Style。像这样的:

            <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 的方法稍微简单一些。
    【解决方案2】:

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

    <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多