【发布时间】:2017-03-29 04:31:38
【问题描述】:
假设我们有一个控件,它在资源中设置了自己的样式:
<Page.Resources>
<Style TargetType="Button" x:Key="ButtonStyle">
<Setter Property="Background" Value="Red"/>
<Setter Property="FontSize" Value="20"/>
</Style>
</Page.Resources>
<Grid>
<Button Content="Test label" Style="{StaticResource ButtonStyle}"/>
</Grid>
问题:例如 - 我想让用户决定按钮背景应该具有哪种背景颜色 - 当控件已经显示在布局上时。
在 xaml 中编辑样式将不起作用,因为必须重新应用它来控制 - 它是 StaticResource,所以它永远不会这样做。 有没有办法强制控件重新应用样式?
在代码中设置样式也不起作用,除非有一种方法可以获取现有样式并仅更改一个属性,而其余部分保持不变,而不是手动复制/设置它们。不要认为以这种方式重新应用样式以防我有多个控件是个好主意。
理想方式:1) 从 ResourceDictionary 中获取样式 2) 更改此样式中的一个属性 3) 调用 Control.RefreshStyle() 方法,该方法将使控件查找样式并再次应用它。
任何想法如何以干净的方式做?样式存储在 ResourceDictionaries 中,并且必须保持这种方式。如何更改/修改它们,然后强制控件应用新样式?
请注意,创建 var style = new Style();然后手动添加 style.AddValue(...);并设置 control.Style = style;不是我的解决方案。我有太多的样式和太多的控件。
编辑: 请注意 2:我使用的是 UWP,而不是 WPF,因此所有基于 DynamicResource 的解决方案都不适用于我
【问题讨论】:
-
我在 UWP 中没有 DynamicResource
标签: c# xaml uwp win-universal-app