当用户将鼠标悬停在按钮上时,一直试图找到为按钮设置默认字体颜色的方法。目前他们都默认为黑色。如果我在HTML / CSS中这样做,我会使用悬停样式,但似乎无法弄清楚如何在XAML中执行相同的效果。
任何建议都会很棒。 谢谢, 鸡舍
答案 0 :(得分:1)
你在这里有两条路。
您可以覆盖按钮的默认样式(确定按钮的悬停颜色)。默认情况下,您可以在C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.<WindowsBuildNumber>.0\Generic
中找到大多数XAML控件默认样式on MSDN或在您的计算机上找到。文件generic.xaml
和themeresources.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>
请注意,许多不同的风格依赖于刷子,因此更改它可能会产生许多意想不到的副作用。
希望有所帮助!