2012-07-19 57 views
2

假設我在窗口中有一個名爲Graph的用戶控件。此用戶控件包含一個網格,其中有另一個用戶控件,稱爲工具欄。現在Graph公開一個名爲Mode的公共屬性,該屬性使用名爲ModeProperty的依賴屬性作爲後備存儲。我想要工具欄用戶控件中的一個元素綁定到其祖先圖形中的Mode屬性。我怎樣才能做到這一點?即使只是獲得對Graph的引用,也證明比我預期的更難,this.parent獲得對網格的引用而不是Graph。從usercontrol綁定到父用戶控件的屬性

回答

7

你只能像這樣在XAML中綁定了 -

<Toolbar Mode="{Binding Path=Mode, RelativeSource={RelativeSource 
     Mode=FindAncestor, AncestorType = UserControl, AncestorLevel =2}}"/> 

你也可以在你的綁定是這樣使用的ElementName -

<Toolbar Mode="{Binding Path=Mode, ElementName=GraphUserControl}"/> 

你必須設置X:在Name屬性的userControl要綁定到 -

<UserControl x:Name="GraphUserControl"></UserControl> 

或者如果您不想在代碼後面做,您可以ñ看看這個有用的職位旅行祖先的父母 - Visual Tree Navigator

+0

這就是我一直在嘗試,但問題是我應用工具欄內的複選框,而不是工具欄本身的綁定。我無法指定用戶控件的實際類型,因此當它需要的圖形是圖形時,它獲得的祖先是直接的(工具欄)。有什麼辦法可以指定我想要一個祖先2級或特定類型的Graph,而不僅僅是通用的usercontrol? – Neil 2012-07-19 14:48:27

+0

是的,你可以在你的相對源標記擴展中指定祖先級別。看到我編輯的答案。 – 2012-07-19 16:58:02

+0

好啊!我暫時解決了這個問題,只需讓Graph在工具欄中設置一個屬性,然後工具欄中的元素就可以綁定到該屬性上,但這顯然不夠理想,會嘗試此解決方案。此外,Graph是類名稱,而不是元素名稱,因此可以同時打開多個圖形。沒辦法指定你想要的類名,對嗎? – Neil 2012-07-20 14:35:42

相關問題