弹出控件有一个单独的VisualTree
并且不是主窗口/用户控件的一部分VisualTree
,这就是Elementname
绑定不起作用的原因。
Popup 控件没有自己的可视化树;而是在调用 Popup 的 MeasureOverride 方法时返回大小为 0(零)。但是,当您将 Popup 的 IsOpen 属性设置为 true 时,将创建一个具有自己的可视化树的新窗口。新窗口包含 Popup 的子内容。
http://msdn.microsoft.com/en-us/library/ms749018.aspx#PopupandtheVisualTree
您可以尝试的是一种通常与 ContextMenus 一起使用的解决方法,即将弹出窗口添加到与您的窗口/用户控件相同的名称范围内 -
popupContainer = new PopupContainer();
popupContainer.Content = PopupContent;
PopupContent.Visibility = Visibility.Visible;
rootContent.Children.Add(popupContainer);
NameScope.SetNameScope(popupContainer, NameScope.GetNameScope(this)); //Or
// NameScope.SetNameScope(popupContainer, NameScope.GetNameScope(rootContent));