我的页面有一个拨动开关,当状态为 ON 时,其颜色与我的主题颜色相同。首先,我需要在开启时更改颜色。
其次,我想通过调用函数在C#代码中动态更改颜色。
我可以使用以下代码更改背景颜色,但我找不到改变其 ON-Color
的方法public void ChangeTogSwColor(Windows.UI.Color _color)
{
mySwitch.Background = _color;
}
谢谢
答案 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;