我在WPF中创建了一个Popup控件,它动态创建一个弹出窗口并将其添加到显示树中的第一个子节点。在弹出窗口的内容(PopupContent)中,绑定工作,但元素绑定似乎被打破。
我在创建弹出窗口的过程中将此归咎于此。有没有办法解决这个问题,以便Popup内容中的Element绑定按预期工作?
popupContainer = new PopupContainer();
popupContainer.Content = PopupContent;
PopupContent.Visibility = Visibility.Visible;
rootContent.Children.Add(popupContainer);
答案 0 :(得分:1)
PopUp控件有一个单独的VisualTree
,并且不是主Window / UserControl的VisualTree
的一部分,这就是为什么Elementname
绑定不起作用的原因。
Popup控件没有自己的可视树;它反而回来了 弹出窗口的MeasureOverride方法时,大小为0(零) 调用。但是,当您将Popup的IsOpen属性设置为true时,a 创建具有自己的可视树的新窗口。新窗口 包含弹出窗口的子内容。
http://msdn.microsoft.com/en-us/library/ms749018.aspx#PopupandtheVisualTree
您可以尝试的是与ContextMenus一起使用的解决方法,即在与窗口/ UserControl相同的名称范围内添加弹出窗口 -
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));