访问托管DataTemplate的ContentPresenter的根视觉

时间:2009-08-18 02:34:22

标签: c# .net wpf data-binding

我正在使用拖放式Adorner模型,我通过ContentPresenter实例化DataTemplate并将其添加到我的控件/窗口的Adorner层。我遇到的问题是我需要在实例化的DataTemplate的根可视元素上注册鼠标事件,这样我就可以改变状态并检测行为中的下降。由于我正在编写一个Behavior,我需要在代码中访问它。我可以尝试将事件附加到演示者本身,但这没有做任何事情,我假设我可以在DataTemplate中使用TemplateBinding,但我真的不想把这个负担放在创建者身上DataTemplate。

<DataTemplate>
    <TextBlock Text={Binding Path=Name} />
</DataTemplate>

ContentPresenter presenter = new ContentPresenter();
presenter.Child = myDataTemplate;

adornerLayer.Items.Add(presenter);

1 个答案:

答案 0 :(得分:0)

你不能使用VisualTreeHelper走向AdornedElement的可视化树,或者尝试使用框架元素来构建逻辑树吗?

此方法添加到自定义装饰器中,将从装饰元素的树中检索根视觉效果 - 可能是窗口。

    public UIElement GetRootVisual()
    {
        UIElement root = AdornedElement;
        if (root != null)
        {
            UIElement parent = VisualTreeHelper.GetParent(root) as UIElement;
            if (parent != null)
            {
                root = parent;
            }
        }

        return root;
    }
相关问题