2010-05-06 78 views
0

FindAncestor RelativeSource僅支持'Self'和'TemplatedParent', ,但我必須將彈出窗口的寬度與頁面寬度綁定。Silverlight 4中的FindAncestor RelativeSource的替代方法綁定到頁面的屬性

給頁面起一個名字會導致問題,因爲有時候它會拋出異常,說有一個名字的控件已經存在於可視化樹中。

<Popup IsOpen="True" 
     Width="{Binding ElementName=BordPage, Path=Width}" 
     Height="{Binding ElementName=BordPage, Path=Height}"> 

背景資料:

我使用的是SL4導航基礎的應用在這裏。 BordPage是一個導航頁面, ,我在應用程序中使用了多次。所以在頁面中給它一個名字並不是一個好主意, ,但是我不知道如何將其綁定到頁面的寬度和高度。

我想要做的是有一個黑色邊框(不透明度0.8)覆蓋整個屏幕, (包括MainPage的控件)。然後,我想顯示一些其他控件。

由於應用程序是觸摸控制的,因此向用戶提供一個ComboBox來選擇一個值並不適用。相反,我想用一個列表框佔據大部分屏幕來顯示這個黑色覆蓋窗口,這樣用戶只需點擊一下鼠標就可以輕鬆觸摸他想要的值。

更新:我只是意識到我可以使用ChildWindow類來做到這一點。 但我原來的問題仍然存在。

回答

1

我對此問題的一般解決方案是通過編寫自定義行爲。這不是一個純粹的XAML解決方案,但它爲您提供了更多的靈活性。

創建一個行爲,它可以搜索VisualTree來查找正確的項目,然後讓它正確設置Popup的寬度。

它可能比直接綁定更復雜一點,但它避免了所有命名問題。

1

把你控制的構造下面這樣就可以避免將其命名爲:

DataContext = this; 
相關問題