我有一个继承自DrawingVisual的类。它声明了一个DependencyProperty,它在注册时应该从父级继承它的值。
然后我在这个类的两个实例之间创建一个父子关系。我设置了父DependencyProperty,但子的DependencyProperty没有返回父值。谁能确定我做错了什么?
这是DrawingVisual子类型的声明:
public class MyDrawingVisual : DrawingVisual
{
public static readonly DependencyProperty SomeValueProperty;
static MyDrawingVisual()
{
FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata() { Inherits = true };
SomeValueProperty = DependencyProperty.Register("SomeValue", typeof(double), typeof(MyDrawingVisual), metadata);
}
public double SomeValue
{
get { return (double)GetValue(SomeValueProperty); }
set { SetValue(SomeValueProperty, value); }
}
}
创建父子关系的方法如下:
private void Test()
{
MyDrawingVisual mdv1 = new MyDrawingVisual() { SomeValue = 1.23 };
MyDrawingVisual mdv2 = new MyDrawingVisual();
mdv1.Children.Add(mdv2);
double value = mdv2.SomeValue; // Expected = 1.23, actual = 0.0
}
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
FrameworkPropertyMetadata仅适用于FrameworkElement派生类。
我在VS生成的WPF应用程序上重现了您的问题,然后从FrameworkElement派生了MyDrawingVisual,它的工作方式与广告一致。如果它派生自UIElement(FrameworkElement的基类),则它不再有效。
可视继承取决于内部属性InheritanceParent,我们无法设置,抱歉。