我需要从代码中修改资源中的样式。我已经知道我可以像这样访问Setters:
Style st = (Style)this.Resources["myStyle"];
set.Setters.Etc...
但我需要更改该样式中特定Setter的值。有没有办法做到这一点?
另外,如何根据“属性”
在setter列表中检索相应的setter感谢
答案 0 :(得分:2)
可能不是“最干净”的方式,但我发现了实际有用的东西:
Style myStyle = (Style)this.Resources["myStyle"];
SetterBase sb = myStyle.Setters.FirstOrDefault(z => (z as Setter).Property == Rectangle.FillProperty);
int iSetterIndex = myStyle.Setters.IndexOf(sb);
myStyle.Setters[iSetterIndex] = new Setter(Rectangle.FillProperty, newScrollThumbBackground);
似乎我不能替换setter的值,所以我只是使用property找到旧的Setter索引。然后用新的Setter对象替换找到的索引处的setter。
答案 1 :(得分:0)
这样的事必须这样做:
SetterBase sb = style.Setters[0];
Setter s = (Setter)sb;
s.TargetName = "abcd";
(至少在WPF中)
修改强>
在Silverlight中没有TargetName
,但您仍然可以访问Property
和Value
。所以,你说的是if (s.Property == Button.IsEnabled) s.Value = false;
。
修改强>
哦,你自己找到了更好的解决方案。 :-)不知道不允许更改Value
。