首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF Style BasedOn丢掉Setter?

问WPF Style BasedOn丢掉Setter?
EN

Stack Overflow用户
提问于 2017-01-31 03:04:00
回答 1查看 111关注 0票数 0

我在代码隐藏中创建了一个样式,即"BasedOn“,一个相同TargetType的全局资源样式。新样式具有与原始样式相同的所有属性,另外还增加了一个唯一的Setter。似乎Setter没有复制到我的新样式中,迫使我遍历所有原始的Setter,并将它们添加为我的样式的新Setter。有没有更好的方法来完成这一行为?

代码语言:javascript
复制
Style defaultStyle = Application.Current.FindResource("NumericFieldStyle") as Style;
Style decimalStyle = new Style(typeof(XamMaskedEditor), defaultStyle);
    // No setters in decimalStyle? There were 6 in defaultStyle
    foreach (SetterBase setter in defaultStyle.Setters)
            decimalStyle.Setters.Add(setter);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-31 03:25:25

Style继承并不像您猜测的那样工作。当您设置Style的BasedOn属性时,它不会成为父样式的克隆。取而代之的是,应用父样式(如果需要,递归),然后应用子样式。

如果注释掉setter循环并在调试器中查看defaultStyle,您将只看到显式添加的setter,但defaultStyle.BasedOn将展开为NumericFieldStyle --在那里您将看到缺少的setter。它们将会被应用。

MSDN says“新样式将继承未在新样式中显式重新定义的原始样式的值”,但正如您所看到的,这是描述实际发生的事情的一种有点油滑的方式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41943542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档