1

我在 UserControl 中有一个 ContentPresenter。ContentPresenter 的内容是一个数据对象,数据类型的 DataTemplate 定义了 ContentPresenter 的 UI(其根是另一个 UserControl)。

外部 UserControl 中的按钮需要将其内容绑定到在 ContentPresenter 托管的内部 UserControl 上定义的附加属性的值。如何在 XAML 中执行此操作?

更广泛地说,在不同名称范围或跨模板边界定义的视觉对象交互的好方法是什么?

4

1 回答 1

0

我有一个类似的问题。最后,我从代码隐藏中对其进行了排序。XAML 不擅长某些事情。

我需要将我的 DataTemplate 的根 UserControl 的 Top 属性绑定到包含它的 ContentPresenter 的 Canvas.Top 附加属性。在我的情况下,ContentPresenter 是由 ItemsControl 生成的,它将 DataTemplate 应用于基础数据对象集合。ContentPresenter 的 Content 属性指向底层数据对象,而不是我需要引用的 Visual 对象。虽然这不是您所面临的问题,但我认为问题的关键是相同的——试图找到对 ContentPresenter 的可视内容的引用。

在最里面的 UserControl 后面的代码中,我通过重写 EndInit 方法来连接绑定。我只打算在一种情况下使用控件,所以这对我来说是可以接受的,但是代码可以根据您的情况移动到其他地方。

/// <summary>
/// Indicates that the initialization process for the element is complete
/// </summary>
public override void EndInit()
{
    this.BindToParentContentPresenter();
    base.EndInit();
}

/// <summary>
/// Binds the Canvas.Top attached property of the content presenter to the top property of this object
/// </summary>
private void BindToParentContentPresenter()
{
    ContentPresenter cp = this.VisualParent as ContentPresenter;
    if (cp != null)
    {
        Binding b = new Binding();
        b.Source = this;
        b.Path = new PropertyPath(TopProperty);
        cp.SetBinding(SelectableUniformCanvas.TopProperty, b);
    }
}
于 2013-01-07T05:40:35.807 回答