2012-07-11 51 views
0

我在WPF中創建了一個Popup控件,該控件動態創建一個彈出窗口並將其添加到顯示樹中的第一個子項。在彈出窗口的內容(PopupContent)中,綁定起作用但元素綁定似乎被破壞。動態添加的子項中的元素綁定中斷

我在創建彈出窗口的方式上指責這一點。有沒有辦法解決這個問題,以便Popup的內容中的元素綁定按預期工作?

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

回答

1

彈出控件都有一個單獨的VisualTree,而不是主窗口/ UserControl的VisualTree的一部分,這就是爲什麼Elementname綁定的將無法工作。

Popup控件沒有自己的可視化樹;當彈出的MeasureOverride方法調用 時,它返回 的大小爲0(零)。但是,當您將Popup的IsOpen屬性設置爲true時,將創建一個帶有自己的可視化樹的新窗口 。新窗口 包含Popup的子內容。

http://msdn.microsoft.com/en-us/library/ms749018.aspx#PopupandtheVisualTree

什麼你可以嘗試是被genrally與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)); 
+0

我不使用內置的彈出式菜單,但名稱範圍聽起來是正確的。我會給它一個鏡頭。 – Brian 2012-07-13 21:10:19