結合你能解釋一下下面的代碼WPF:WPF與PlacementTarget和的RelativeSource
DataContext="{Binding Path=PlacementTarget,RelativeSource={x:Static RelativeSource.Self}}">
我覺得非常混亂。什麼是放置目標和相對來源?
結合你能解釋一下下面的代碼WPF:WPF與PlacementTarget和的RelativeSource
DataContext="{Binding Path=PlacementTarget,RelativeSource={x:Static RelativeSource.Self}}">
我覺得非常混亂。什麼是放置目標和相對來源?
這看起來像是用於彈出式元素的黑客,如ContextMenus
和Popup
-windows。
這些元素的問題是,它們與窗口的可視化樹分離。因此DataContext
不可用。 PlacementTarget
是到視覺樹的元素的鏈接。
大多數情況下,您會發現一個綁定綁定路徑,如PlacementTarget.Tag
,其中源元素中的Tag
屬性已設置爲DataContext
,但在某些情況下,元素本身也是有意義的,例如在您的示例中。
假設上述代碼在ToolTip
或ContextMenu
中使用,DataContext
將被設置爲「擁有」該元素的控件。
請看(Gishu +1)的帖子以獲取力學解釋。
這是將一個事物(UI控件?需要查看更多代碼片段)的DataContext綁定到它自己的PlacementTarget屬性值。
RelativeSource用於指示相對於綁定目標的源對象。 path屬性表示源對象上屬性的名稱。
每個FrameworkElement
都有一個DataContext
這是一個任意的對象。數據綁定的默認來源是DataContext
。您可以使用RelativeSource.Self
將綁定的源更改爲FrameworkElement
本身,而不是其DataContext
。所以RelativeSource
部分只是將您從FrameworkElement
的DataContext
「上一級」移動到FrameworkElement
本身。一旦你在FrameworkElement
你可以指定一個路徑到它的任何屬性。如果FrameworkElement
是Popup
,它將具有PlacementTarget
屬性,該屬性是Popup
相對於其定位的其他FrameworkElement
。
總之,如果你有一個Popup
放置相對於TextBox
例如,表達設置Popup
的DataContext
到TextBox
並且作爲結果{Binding Text}
某處Popup
的機構將結合的文本TextBox
。