Binding.RelativeSource Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает или задает источник привязки, указывая его расположение относительно положения целевого объекта привязки. Это чаще всего используется в привязках в шаблонах элементов управления XAML.
RelativeSource RelativeSource();
void RelativeSource(RelativeSource value);
public RelativeSource RelativeSource { get; set; }
var relativeSource = binding.relativeSource;
binding.relativeSource = relativeSource;
Public Property RelativeSource As RelativeSource
<Binding RelativeSource="{RelativeSource TemplatedParent}"/>
-or-
<Binding RelativeSource="{RelativeSource Self}"/>
Значение свойства
Относительное расположение используемого источника привязки. Значение по умолчанию — NULL.
Примеры
Этот пример XAML взят из файла generic.xaml, который определяет визуальные состояния по умолчанию для всех элементов управления XAML. Этот сегмент является одним из визуальных состояний элемента управления ToggleSwitch . Здесь одна из анимаций, определяемых визуальным состоянием, ссылается на свойства элемента управления, которые существуют специально, чтобы шаблоны могли обращаться к ним и получать значения времени выполнения, изменяющие анимацию. Чтобы XAML шаблона получает свойства из элемента управления, к которому применяется шаблон, привязка должна использовать {RelativeSource TemplatedParent}
в качестве значения RelativeSource.
<VisualStateGroup x:Name="ToggleStates">
<VisualStateGroup.Transitions>
<VisualTransition x:Name="DraggingToOnTransition"
From="Dragging"
To="On"
GeneratedDuration="0">
<Storyboard>
<RepositionThemeAnimation TargetName="SwitchKnob"
FromHorizontalOffset="
{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.KnobCurrentToOnOffset}"
/>
<RepositionThemeAnimation TargetName="SwitchCurtain"
FromHorizontalOffset="
{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CurtainCurrentToOnOffset}"
/>
</Storyboard>
</VisualTransition>
...
</VisualStateGroup.Transitions>
</VisualStateGroup>
Комментарии
Source, RelativeSource и ElementName являются взаимоисключающими в привязке. Если вы задали один из этих атрибутов, установка одного из двух других атрибутов в привязке (с помощью XAML или кода) вызовет исключение. Для задания RelativeSource в XAML всегда требуется расширение разметки {RelativeSource}. Это также верно, если вы создаете всю привязку как расширение разметки {Binding}. В этом случае расширение разметки {RelativeSource} вложено в компонент RelativeSource выражения.
Нельзя задать значения свойств объекта Binding после того, как привязка будет присоединена к целевому элементу и целевому свойству. Если вы попытаетесь сделать это, вы получите исключение во время выполнения.