Как привязаться к элементу внутри ControlTemplate?

#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 to Control_A.Color . Но связь между ними заключается в том, что один является шаблонным родительским элементом, а другой шаблонным дочерним элементом.