gpt4 book ai didi

c# - 如何在其生命周期内更改控件的样式

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:19 25 4
gpt4 key购买 nike

假设我们有一个在资源中设置了自己的样式的控件:

<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 的解决方案都不适合我

最佳答案

主要思想是为许多目标样式设置 1 个键(例如,x:key="ButtonStyleKey" 用于按钮控件)并且您应该有一个或多个资源字典(xaml文件)以不同的方式定义该 key 。当您需要更改样式时,您必须在您的(页面、窗口小部件.. 无论您使用什么 UIElement)中重新加载资源字典

更新

您可以执行以下操作:

var resDictionary = new ResourceDictionary();
resDictionary.Source = new Uri("CustomResourceDictionary.xaml",UriKind.Relative);
Application.Current.Resources.MergedDictionaries.Add(resDictionary);

我还必须提到只有 ThemeResource(WPF 中的 DynamicResource)会进行更改。静态资源编号

<Button Content="Test label" Style="{ThemeResource ButtonStyle}"/>

关于c# - 如何在其生命周期内更改控件的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com