#wpf #data-binding #controltemplate
#wpf #привязка к данным #controltemplate
Вопрос:
Я создал два пользовательских элемента управления в wpf, Control_A
и Control_B
. Оба они определяют ColorProperty
. Control_A
ControlTemplate
состоит из Control_B
экземпляра,
<ControlTemplate
TargetType="{x:Type Control_A}">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Control_B />
</Border>
</ControlTemplate>
Я хочу привязать A.Color
(цель) к B.Color
(источнику). Как это может быть достигнуто в XAML?
Комментарии:
1. Я думаю, вы перепутали поток данных. Это было бы
ViewModel > View > Control_A > ControlTemplate > Control B
.Control_B
является частью состава шаблона, поэтому вы не можете привязываться к нему напрямую / предоставлять данные динамически, не передавая данные черезControl_A
.2. Возможно, вы правы @Funk, но я не использую MVVM.
Ответ №1:
Это можно сделать с TwoWay
помощью привязки. Этот способ имеет свои недостатки, но он работает,
<ControlTemplate
TargetType="{x:Type Control_A}">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Control_B
Color="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Color,
Mode=TwoWay}"/>
</Border>
</ControlTemplate>
Ответ №2:
Я бы попытался присвоить Control_B имя и привязать к его цвету.
Color="{Binding ElementName=Foo, Path=Color}"
Комментарии:
1. Но где бы вы написали это внутри Control_A
ControlTemplate
?2. То, что вы хотите сделать с цветом в пользовательском элементе управления, — это ваше решение. Может быть, используйте его в качестве фона вашей границы или, может быть, вам нужно больше элементов, где вы можете его назначить. Или вы просто хотите, чтобы он был назначен вашему «я»?
3. Я хочу значение
Control_B.Color
toControl_A.Color
. Но связь между ними заключается в том, что один является шаблонным родительским элементом, а другой шаблонным дочерним элементом.