元素绑定在动态添加的子项中被破坏

时间:2012-07-11 18:27:35

标签: c# .net wpf popup elementname

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

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

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

1 个答案:

答案 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));