1

私は WPF/XAML を使用しており、window呼び出されたに基づいて独自のビューを定義しましたcontainer。プロパティにリンクされcontainerた DependencyProperty が呼び出されます。私の問題は、プロパティのメソッドがから呼び出されないことです。プロパティの登録中にtoを変更すると、呼び出されます。ほぼ間違いなく、登録中に何か間違ったことをしています。CurrentElementPropertyCurrentElementsetDerivedContainertypeof(Container)typeof(DerivedContainer)

の定義Container

class Container : Window
{
    public static readonly DependencyProperty CurrentElementProperty = 
        DependencyProperty.Register(
            "CurrentElement",
            typeof(Element),
            typeof(Container),
            new FrameworkPropertyMetadata(
                null,
                FrameworkPropertyMetadataOptions.Inherits));
    public Element CurrentElement
    {
        get
        {
            return (Element)this.GetValue(Container.CurrentElementProperty);
        }
        set
        {
            this.SetValue(Container.CurrentElementProperty, value);
        }
    }
}

XAML のDerivedContainer(標準の XML 名前空間定義を削除しました)

<local:Container x:Class="ns.DerivedContainer"
                 xmlns:local="clr-namespace:ns">
  <local:Container.CurrentElement>
    <Element />
  </local:Container.CurrentElement>
</local:Container>

コードビハインドDerivedContainer

public partial class DerivedContainer : Container
{
    public DerivedContainer()
    {
        InitializeComponent();
    }
}
4

1 に答える 1

3

私の問題は、プロパティの set メソッドが DerivedContainer から呼び出されないことです

これは問題ではありません。これは予期された動作です。WPF はSetValue、ラッパーを介さずに直接呼び出します。ラッパーは、他のクライアント コードの便宜のためにあります。プロパティが設定されているときに何かをする必要がある場合は、呼び出しにコールバックを登録する必要がありますDependencyProperty.Register

于 2013-04-12T07:54:46.743 に答える