6

我有一个如下的类层次结构,并且绑定到 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公开了被new关键字覆盖的 VisibleRange 属性。我无法将泛型类型参数添加到基AxisBase类,而且我还需要访问这两个类中的属性。所以,我想知道考虑到这些限制,是否有人对如何更好地避免设计器异常有任何建议?

4

2 回答 2

10

“依赖属性”是您注册的东西:

 public static readonly DependencyProperty VisibleRangeProperty = 
    DependencyProperty.Register("VisibleRange", typeof(IRange), typeof(AxisBase), ...);

当您查看该声明时,您可以看到它正在注册typeof(IRange)

派生类 DateTimeAxis 公开了被 new 关键字覆盖的 VisibleRange 属性。

是的,但它暴露的是“正常”属性,而不是依赖属性。
另一个因素是属性具有不同的类型。

于 2012-04-05T21:36:30.823 回答
0

Try to write in your code initialization of your XAxis, like

AxisBase XAxis = new DateTimeAxis ()

Should work.

于 2012-04-05T21:36:52.387 回答