尝试在XAML Win 10 UAP中的所有按钮上设置焦点/悬停前景色

时间:2017-01-03 07:54:36

标签: xaml hover win-universal-app

当用户将鼠标悬停在按钮上时,一直试图找到为按钮设置默认字体颜色的方法。目前他们都默认为黑色。如果我在HTML / CSS中这样做,我会使用悬停样式,但似乎无法弄清楚如何在XAML中执行相同的效果。

任何建议都会很棒。 谢谢, 鸡舍

1 个答案:

答案 0 :(得分:1)

你在这里有两条路。

您可以覆盖按钮的默认样式(确定按钮的悬停颜色)。默认情况下,您可以在C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.<WindowsBuildNumber>.0\Generic中找到大多数XAML控件默认样式on MSDN或在您的计算机上找到。文件generic.xamlthemeresources.xaml具有所有默认样式和主题定义。

生成现有控件默认样式副本的简便方法是在Blend中打开页面(或其他),右键单击该控件的实例,然后选择“编辑模板” - &gt; “编辑副本”。这将为该控件创建样式的副本。请注意,如果您使用Blend为您生成样式的副本,它会自动为其命名。如果你想覆盖每个按钮的样式,你的Style就不会有一个名字,即:

<Style TargetType="Button">
    <!--Your custom style goes here-->
</Style>

然后,您要更改的部分样式将是此部分:

<VisualState x:Name="PointerOver">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                       Storyboard.TargetProperty="BorderBrush">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumLowBrush}" />
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                       Storyboard.TargetProperty="Foreground">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseHighBrush}" />
        </ObjectAnimationUsingKeyFrames>
        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
    </Storyboard>
</VisualState>

使用ContentPresenter的Storyboard.TargetName和Foreground的Storyboard.TargetProperty查看ObjectAnimationUsingKeyFrame?这是在按钮的文本颜色悬停时更改按钮的文本颜色的部分。因此,您所要做的就是将其值从{ThemeResource SystemControlHighlightBaseHighBrush}更改为您想要的任何值。请注意,Button的Foreground属性需要Brush,但十六进制颜色代码将隐式转换为SolidColorBrush,因此您可以使用#FFFFFF作为您的值。

或者,你看到在默认样式中,按钮是如何使用{ThemeResource SystemControlHighlightBaseHighBrush}的值来确定前景颜色的?你实际上可以覆盖那个画笔。因为它是ThemeResource,所以你想要在主题词典中覆盖它。所以,在你的App.xaml中,你想要做这样的事情:

<ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Light">
        <SolidColorBrush x:Key="SystemControlHighlightBaseHighBrush" Color="your light theme color here"/>
    </ResourceDictionary>
    <ResourceDictionary x:Key="Default"> <!--The dark theme is considered "default".-->
        <SolidColorBrush x:Key="SystemControlHighlightBaseHighBrush" Color="your dark theme color here"/>
    </ResourceDictionary>
    <!--And for extra bonus points....-->
    <ResourceDictionary x:Key="HighContrast">
        <SolidColorBrush x:Key="SystemControlHighlightBaseHighBrush" Color="your high contrast theme color here"/>
    </ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>

请注意,许多不同的风格依赖于刷子,因此更改它可能会产生许多意想不到的副作用。

希望有所帮助!