c# - 如何在 xaml 中为 ToggleButton 设置切换颜色?
问题描述
所以这可能是一个非常简单的答案。在我的 UWP 应用程序中,我尝试开始使用内置的 Windows 控件,而不是我自己的由 Textblocks 周围的边框制成的按钮。我这样做是因为它更简单,但最重要的是我需要一个易于使用的切换按钮。
我已经了解了 CommandBar 和 AppBarToggleButton,这些似乎正是我想要的。我可以很好地设置 CommandBar 的背景颜色,但是当切换 AppBarToggleButton 时,它始终是用户的强调色。我需要能够定义它以匹配我的应用程序的品牌(绿色)。我有一种感觉,它需要我使用某种主题,因为它不在 xaml 对象的画笔属性菜单中,但从那时起我就迷路了。
所以这是我的代码,虽然它非常基础。
<CommandBar Background="{StaticResource MapButtonsBackgroundAcrylic}">
<AppBarToggleButton x:Name="tog_view_mode" Icon="View" Label="View Mode" Foreground="White"/>
<AppBarSeparator Foreground="White"/>
<AppBarToggleButton x:Name="tog_edit_mode" Icon="Edit" Label="Edit Mode" Foreground="White"/>
</CommandBar>
这就是它给我的。我的用户强调色是蓝色。对黑色文本的更改也不好。
由于我的应用程序中有几个切换,我想制作一个可以分配它们的单一样式,或者更改应用程序看到的强调色?我不确定这里的正确程序是什么,因为我是修改内置控件的新手。
所以我需要一种方法,当切换时,
- 背景为绿色,例如#FF008000
- 前景为白色。
谁能帮我吗?
解决方案
您可以覆盖样式模板AppBarToggleButton
以实现此目的。为此,您需要右键单击AppBarToggleButton > Edit template > Edit a copy。
然后将相关代码添加到可视状态。在您的情况下,视觉状态是“已检查”。
<VisualState x:Name="Checked">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="CheckedHighlightBackground" Storyboard.TargetProperty="Opacity">
<DiscreteObjectKeyFrame KeyTime="0" Value="1"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="OverflowCheckGlyph" Storyboard.TargetProperty="Opacity">
<DiscreteObjectKeyFrame KeyTime="0" Value="1"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="0" Value="Your color here(green)"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="TextLabel" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}"/>
</ObjectAnimationUsingKeyFrames>
<PointerUpThemeAnimation Storyboard.TargetName="OverflowContentRoot" />
</Storyboard>
</VisualState>
希望这会有所帮助..请随时提出您可能有的任何问题..