2011-02-16 55 views
4

結合你能解釋一下下面的代碼WPF:WPF與PlacementTarget和的RelativeSource

DataContext="{Binding Path=PlacementTarget,RelativeSource={x:Static RelativeSource.Self}}"> 

我覺得非常混亂。什麼是放置目標和相對來源?

回答

9

這看起來像是用於彈出式元素的黑客,如ContextMenusPopup -windows。
這些元素的問題是,它們與窗口的可視化樹分離。因此DataContext不可用。 PlacementTarget是到視覺樹的元素的鏈接。
大多數情況下,您會發現一個綁定綁定路徑,如PlacementTarget.Tag,其中源元素中的Tag屬性已設置爲DataContext,但在某些情況下,元素本身也是有意義的,例如在您的示例中。

假設上述代碼在ToolTipContextMenu中使用,DataContext將被設置爲「擁有」該元素的控件。

請看(Gishu +1)的帖子以獲取力學解釋。

3

這是將一個事物(UI控件?需要查看更多代碼片段)的DataContext綁定到它自己的PlacementTarget屬性值。

RelativeSource用於指示相對於綁定目標的源對象。 path屬性表示源對象上屬性的名稱。

6

每個FrameworkElement都有一個DataContext這是一個任意的對象。數據綁定的默認來源是DataContext。您可以使用RelativeSource.Self將綁定的源更改爲FrameworkElement本身,而不是其DataContext。所以RelativeSource部分只是將您從FrameworkElementDataContext「上一級」移動到FrameworkElement本身。一旦你在FrameworkElement你可以指定一個路徑到它的任何屬性。如果FrameworkElementPopup,它將具有PlacementTarget屬性,該屬性是Popup相對於其定位的其他FrameworkElement

總之,如果你有一個Popup放置相對於TextBox例如,表達設置PopupDataContextTextBox並且作爲結果{Binding Text}某處Popup的機構將結合的文本TextBox

相關問題