次のようなクラス階層があり、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' プロパティに 'Binding' を設定することはできません。「Binding」は、DependencyObject の DependencyProperty でのみ設定できます。
派生クラスは、キーワードDateTimeAxis
によってオーバーライドされる VisibleRange プロパティを公開しています。new
基本クラスにジェネリック typeparam を追加することはできませんAxisBase
。また、両方のクラスでプロパティにアクセスする必要があります。したがって、これらの制約を考えると、デザイナーの例外を回避するためにこれをより適切に行う方法について誰か提案があるかどうか疑問に思っていますか?