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

时间:2017-07-01 13:59:00

标签: c# xaml uwp win-universal-app uwp-xaml

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

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

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

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

谢谢

1 个答案:

答案 0 :(得分:1)

这可以通过覆盖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" />

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

但是,由于您还希望在代码中以动态方式更新它,因此您应该将Fill属性绑定到ToggleSwitch控件的现有依赖项属性(否则您需要扩展控件和添加自己的依赖项属性。)

我个人会使用Background并将Background="{TemplateBinding Background}"替换为Background="Transparent"来自顶层Grid&#39;因为我从未真正需要为控件提供不同的背景透明以外的颜色。

然后,您的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;