我有一个类似的问题。最后,我从代码隐藏中对其进行了排序。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);
}
}