Каждый FrameworkElement
имеет DataContext
, который является произвольным объектом. Источником по умолчанию для привязки данных является DataContext
. Вы можете использовать RelativeSource.Self
, чтобы изменить источник привязки к самому FrameworkElement
вместо DataContext
. Таким образом, часть RelativeSource
просто перемещает вас «на один уровень» с DataContext
из FrameworkElement
до самого FrameworkElement
. Как только вы окажетесь на FrameworkElement
, вы можете указать путь к любому из его свойств. Если FrameworkElement
является Popup
, у него будет свойство PlacementTarget
, которое является другим FrameworkElement
, к которому относится Popup
относительно.
Короче говоря, если у вас есть Popup
, размещенный, например, относительно TextBox
, это выражение устанавливает DataContext
из Popup
в TextBox
и в результате {Binding Text}
где-то в тело Popup
будет привязано к тексту TextBox
.