0
我有一個類 public class NavigableViewport3D : Viewport3D
。該類應該隱藏Viewport3D.Camera
屬性,以使其變爲只讀。這是我到目前爲止有:WPF:如何使基類的依賴項屬性爲只讀
public class NavigableViewport3D : Viewport3D
{
protected static readonly DependencyPropertyKey CameraPropertyKey = DependencyProperty.RegisterReadOnly(
"Camera",
typeof(Camera),
typeof(NavigableViewport3D),
new PropertyMetadata()
);
public static readonly new DependencyProperty CameraProperty = CameraPropertyKey.DependencyProperty;
public new Camera Camera
{
get
{
return base.Camera;
}
protected set
{
base.Camera = value;
}
}
}
但我也希望NavigableViewport3D.CameraProperty
到送花兒給人返回相同的值作爲Viewport3D.CameraProperty
/base.Camera
... 如果沒有依賴屬性,我會做這樣的:
public class NavigableViewport3D : Viewport3D
{
public new Camera Camera
{
get
{
return base.Camera;
}
protected set
{
base.Camera = value;
}
}
}
這裏是要做到雙向交流的醜陋的方式:
public class NavigableViewport3D : Viewport3D
{
protected static readonly DependencyPropertyKey CameraPropertyKey = DependencyProperty.RegisterReadOnly(
"Camera",
typeof(Camera),
typeof(NavigableViewport3D),
new PropertyMetadata(new PropertyChangedCallback(
delegate(DependencyObject depO, DependencyPropertyChangedEventArgs e)
{
if (e.OldValue != e.NewValue) //Not sure whether this is needed
depO.SetValue(Viewport3D.CameraProperty, e.NewValue);
}
)));
public static readonly new DependencyProperty CameraProperty = CameraPropertyKey.DependencyProperty;
public new Camera Camera
{
get
{
return this.Camera;
}
protected set
{
this.Camera = value;
}
}
public NavigableViewport3D()
{
Viewport3D.CameraProperty.AddOwner(
typeof(NavigableViewport3D),
new PropertyMetadata(new PropertyChangedCallback(
delegate(DependencyObject depO, DependencyPropertyChangedEventArgs e)
{
var nv3d = depO as NavigableViewport3D;
if (nv3d == null)
return;
nv3d.SetValue(CameraPropertyKey, e.NewValue);
}
)));
}
}
我認真地希望有更好的方式來做到這一點...有什麼建議?
感謝,但我想,以使新屬性只讀... – meanandvicious 2010-07-26 09:28:34
也許這MSDN文章將幫助: http://msdn.microsoft.com/en -us /庫/ ms754044.aspx – 2010-07-26 13:37:02