在通用 Windows 应用程序中动态更改 ToggleSwitch ON-Color

Changing ToggleSwitch ON-Color Dynamically in Universal Windows Application

我的页面中有一个拨动开关,当它的状态为ON时,它的颜色与我的主题颜色相同。首先我需要在 ON.

时改变它的颜色

其次,我想通过调用函数在 C# 代码中动态更改颜色。

我可以使用以下代码更改背景颜色,但我找不到更改其 ON-Color

的方法
public void ChangeTogSwColor(Windows.UI.Color _color)
{
    mySwitch.Background = _color;
} 

谢谢

这可以通过覆盖 ToggleSwitch 的默认样式来完成。

首先,从 here 中获取样式并将其放入您的 App.xaml 中。之后,找到一个名为 SwitchKnobBounds -

的元素
<Rectangle x:Name="SwitchKnobBounds" 
            Fill="{ThemeResource ToggleSwitchFillOn}" 
            Stroke="{ThemeResource ToggleSwitchStrokeOn}" 
            StrokeThickness="{ThemeResource ToggleSwitchOnStrokeThickness}"
            Width="44" Height="20" Opacity="0" RadiusY="10" Grid.Row="2" RadiusX="10" />

这是表示 ToggleSwitchborderbackground 的元素。要更改背景颜色,您只需将 ToggleSwitchFillOn 替换为您喜欢的任何颜色即可。

但是,由于您还想在代码中动态更新它,您应该让 Fill 属性 绑定到 ToggleSwitch 的现有依赖项 属性控件(否则你需要扩展控件并添加你自己的依赖属性)。

我个人会使用 Background 并从顶层 GridBackground="{TemplateBinding Background}" 替换为 Background="Transparent" 因为我从来不需要为控件提供不同的背景颜色除了 透明.

然后,你的 Rectangle 看起来像这样 -

<Rectangle x:Name="SwitchKnobBounds" 
            Fill="{TemplateBinding Background}" 
            Stroke="{ThemeResource ToggleSwitchStrokeOn}" 
            StrokeThickness="{ThemeResource ToggleSwitchOnStrokeThickness}"
            Width="44" Height="20" Opacity="0" RadiusY="10" Grid.Row="2" RadiusX="10" />

最后,可以直接在XAML或代码中设置On状态的Background颜色

<ToggleSwitch x:Name="MyToggle" Background="Green" />

MyToggle.Background = Colors.Red;