为什么DefaultStyleKey不更改我的子类的默认样式?

我有一个名为Handle的基类,我从中派生了几个基类,如RectHandleEllipseHandle 。 在这些子类中,我试图覆盖默认样式键以指向Handle但不应用针对Handle的样式。 我仍然必须直接或通过’BasedOn’样式明确地定位RectHandleEllipseHandle 。 我错过了什么?

这是DefaultStyleKeyProperty的MSDN摘录:

控件通常会将此属性的默认值覆盖为其自己的类型,但在某些情况下,还可以使用主题词典中存在样式的基本类型。

这是我的代码

 public abstract class Handle : Shape { static Handle() { WidthProperty.OverrideMetadata( typeof(Handle), new FrameworkPropertyMetadata(10.0)); HeightProperty.OverrideMetadata( typeof(Handle), new FrameworkPropertyMetadata(10.0)); FillProperty.OverrideMetadata( typeof(Handle), new FrameworkPropertyMetadata(Brushes.Yellow)); StrokeProperty.OverrideMetadata( typeof(Handle), new FrameworkPropertyMetadata(Brushes.Gray)); StrokeThicknessProperty.OverrideMetadata( typeof(Handle), new FrameworkPropertyMetadata(2.0)); } } public class RectHandle : Handle { static RectHandle() { DefaultStyleKeyProperty.OverrideMetadata( typeof(RectHandle), new FrameworkPropertyMetadata(typeof(Handle))); } protected override Geometry DefiningGeometry { get { var origin = new Point(-RenderSize.Width / 2, -RenderSize.Height / 2); var rect = new Rect(origin, RenderSize); return new RectangleGeometry(rect); } } } public class EllipseHandle : Handle { static RectHandle() { DefaultStyleKeyProperty.OverrideMetadata( typeof(EllipseHandle), new FrameworkPropertyMetadata(typeof(Handle))); } protected override Geometry DefiningGeometry { get { var origin = new Point(-RenderSize.Width / 2, -RenderSize.Height / 2); var rect = new Rect(origin, RenderSize); return new EllipseGeometry(rect); } } } 

风格……

    

再次,这不起作用。

我的解决方法是基于第一个创建另外两个样式,但我认为这是DefaultStyleKey属性的整个点。

      

我想到了。 DefaultStyleKey属性仅引用在主题中定义的样式 ,或者在主题下的DefaultStyleKey 引用 。 如果我在那里移动我的Handle风格,突然之间就可以了。 如果我把它本地复制到窗口,我已经完成了,它没有。 有趣的是查找不同。