Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF风格的BasedOn丢了二传手?_C#_Wpf_Infragistics - Fatal编程技术网

C# WPF风格的BasedOn丢了二传手?

C# WPF风格的BasedOn丢了二传手?,c#,wpf,infragistics,C#,Wpf,Infragistics,我在代码背后创建了一个样式,它是“BasedOn”,是同一TargetType的全局资源样式。新样式具有与原始样式相同的所有属性,另外还有一个独特的Setter。看起来setter并没有复制到我的新样式中,这迫使我遍历所有原始setter,并将它们作为新setter添加到我的样式中。有没有更好的方法来实现这种行为 Style defaultStyle = Application.Current.FindResource("NumericFieldStyle") as Style; Style d

我在代码背后创建了一个样式,它是“BasedOn”,是同一TargetType的全局资源样式。新样式具有与原始样式相同的所有属性,另外还有一个独特的Setter。看起来setter并没有复制到我的新样式中,这迫使我遍历所有原始setter,并将它们作为新setter添加到我的样式中。有没有更好的方法来实现这种行为

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);

Style
继承并不像你想象的那样有效。当您将
样式的
BasedOn
属性设置为
时,它不会成为父样式的克隆。相反,应用父样式(如果需要,递归),然后应用子样式

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


“新样式将继承未在新样式中明确重新定义的原始样式的值”,但正如您所见,这是一种描述实际情况的有点油嘴滑舌的方式

风格
继承并不像你想象的那样有效。当您将
样式的
BasedOn
属性设置为
时,它不会成为父样式的克隆。相反,应用父样式(如果需要,递归),然后应用子样式

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


“新样式将继承未在新样式中明确重新定义的原始样式的值”,但正如您所见,这是一种描述实际情况的有点油嘴滑舌的方式

如果不在循环中添加setter,它们是否应用于UI?我可能猜继承是通过链接到BasedOn样式来工作的,而不是通过创建它的克隆来工作的。我会研究的。啊。。。我觉得自己很傻。是的,它确实适用于UI,尽管在调试时并不明显。这将有助于我的编码冒险。非常感谢。如果不在循环中添加setter,它们是否应用于UI?我可能猜继承是通过链接到BasedOn样式来工作的,而不是通过创建它的克隆来工作的。我会研究的。啊。。。我觉得自己很傻。是的,它确实适用于UI,尽管在调试时并不明显。这将有助于我的编码冒险。非常感谢。