0

添付プロパティをコード ビハインドで動作させようとしていますが、明らかに何かが欠けています。私が理解しているように、結果は「テスト」である必要がありますが、string.Empty です。

LogicalTreeHelper はchildが の子であることを示しparentているため、ツリーは正しく設定されています。

助言がありますか?

public partial class MainWindow : Window
{
    public MainWindow()
    {
        var parent = new TestParent();
        var child = new Child();
        parent.AddLogicalChild(child);
        parent.SetValue(TestParent.TestProperty, "test");

        var result = child.GetValue(TestParent.TestProperty); // Returns ""

        InitializeComponent();
    }
}


class TestParent : FrameworkElement
{
    public static readonly DependencyProperty TestProperty = 
        DependencyProperty.RegisterAttached("Test", typeof(string), typeof(TestParent), 
        new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.Inherits));

    public void AddLogicalChild(FrameworkElement element)
    {
        base.AddLogicalChild(element);
    }
}

class Child : FrameworkElement
{

}
4

1 に答える 1

0

このような論理ツリーのセットアップは機能しません。LogicalChildrenこれは、 AddLogicalChild を呼び出した後に親のプロパティを調べることで簡単に確認できます。まだnullです。How to: Override the Logical Treeを参照してください。

ただし、継承プロパティはうまく機能します。

var parent = new StackPanel();
var child = new TextBlock();
parent.Children.Add(child);
parent.SetValue(TestParent.TestProperty, "test");

var result = child.GetValue(TestParent.TestProperty); // returns "test"
于 2013-04-24T06:54:12.630 に答える