- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我们有一个在资源中设置了自己的样式的控件:
<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/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!