首页 > 解决方案 > 如何在 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>

这就是它给我的。我的用户强调色是蓝色。对黑色文本的更改也不好。

切换按钮颜色

由于我的应用程序中有几个切换,我想制作一个可以分配它们的单一样式,或者更改应用程序看到的强调色?我不确定这里的正确程序是什么,因为我是修改内置控件的新手。

所以我需要一种方法,当切换时,

谁能帮我吗?

标签: c#xamlcolorsuwp

解决方案


您可以覆盖样式模板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>

希望这会有所帮助..请随时提出您可能有的任何问题..


推荐阅读