我有一个类层次结构,如下所示,绑定到VisibleRange属性的是设计器。
在这里给出类层次结构:
// Base class
public abstract class AxisBase : ContentControl, IAxis
{
public static readonly DependencyProperty VisibleRangeProperty = DependencyProperty.Register(
"VisibleRange", typeof(IRange), typeof(AxisBase),
new PropertyMetadata(default(IRange), OnVisibleRangeChanged));
public IRange VisibleRange
{
get { return (IRange)GetValue(VisibleRangeProperty); }
set { SetValue(VisibleRangeProperty, value); }
}
}
// Derived class
public class DateTimeAxis : AxisBase
{
public new IRange<DateTime> VisibleRange
{
get { return (IRange<DateTime>)GetValue(VisibleRangeProperty); }
set { SetValue(VisibleRangeProperty, value); }
}
}
// And interface definitions
public interface IRange<T> : IRange
{
}
设计师(XAML):
<local:DateTimeAxis Style="{StaticResource XAxisStyle}"
VisibleRange="{Binding ElementName=priceChart,
Path=XAxis.VisibleRange, Mode=TwoWay}"/>
我得到了这个例外:
无法在'DateTimeAxis'类型的'VisibleRange'属性上设置'绑定'。 '绑定'只能在DependencyObject的DependencyProperty上设置。
派生类DateTimeAxis
正在公开VisibleRange属性,该属性被new
关键字覆盖。我无法在基类AxisBase
类中添加泛型类型参数,我还需要在两个类中访问该属性。所以,我想知道给定这些限制,如果有人有任何建议如何更好地避免设计师例外?
答案 0 :(得分:10)
'依赖属性'是您注册的内容:
public static readonly DependencyProperty VisibleRangeProperty =
DependencyProperty.Register("VisibleRange", typeof(IRange), typeof(AxisBase), ...);
当您查看该陈述时,您可以看到它正在注册typeof(IRange)
派生类DateTimeAxis正在公开VisibleRange属性,该属性被new关键字覆盖。
是的,但它暴露了'正常'属性,而不是依赖属性 另一个因素是属性具有不同的类型。
答案 1 :(得分:0)
尝试写入XAxis
的代码初始化,例如
AxisBase XAxis = new DateTimeAxis ()
应该工作。