为什么DefaultStyleKey不更改我的子类的默认样式?
我有一个名为Handle
的基类,我从中派生了几个基类,如RectHandle
和EllipseHandle
。 在这些子类中,我试图覆盖默认样式键以指向Handle
但不应用针对Handle
的样式。 我仍然必须直接或通过’BasedOn’样式明确地定位RectHandle
或EllipseHandle
。 我错过了什么?
这是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
风格,突然之间就可以了。 如果我把它本地复制到窗口,我已经完成了,它没有。 有趣的是查找不同。
上述就是C#学习教程:为什么DefaultStyleKey不更改我的子类的默认样式?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/943431.html