0

我在 WPF 中创建了一个 Popup 控件,它动态创建一个弹出窗口并将其添加到显示树中的第一个子项中。在弹出窗口的内容 (PopupContent) 中,绑定有效,但元素绑定似乎被破坏了。

我将此归咎于我创建弹出窗口的方式。有没有办法解决这个问题,以便弹出窗口内容中的元素绑定按预期工作?

popupContainer = new PopupContainer();
popupContainer.Content =   PopupContent;
PopupContent.Visibility = Visibility.Visible;
rootContent.Children.Add(popupContainer);
4

1 回答 1

1

弹出控件有一个单独的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)); 
于 2012-07-12T10:14:12.330 回答