Изменение DataTrigger в соответствии со значением AttachedProperty - PullRequest
0 голосов
/ 31 января 2012

Я пытаюсь изменить свойство фона в DataTemplate в соответствии со значением AttachedProperty элемента, я не получаю никаких ошибок связывания, но поле Background остается со значением по умолчанию.Что такое проблема?

Просмотр:

<ContentControl common:IsOpen={Binding IsOpenValue} ContentTemplate="{StaticResource MyTemplate}"/>

Шаблон данных:

<DataTemplate x:Key="MyTemplate">
  <Border Width="20" Height="20" Name="TheName"/>

  <DataTemplate.Triggers>
    <DataTrigger Binding="{Binding (common:IsOpen), RelativeSource={RelativeSource Self}}" Value=common:IsOpenEnum.Open>
      <Setter Property="Background" TargetName="TheName" Value="Red"/>
   </DataTrigger>

   <DataTrigger Binding="{Binding (common:IsOpen), RelativeSource={RelativeSource Self}}" Value=common:IsOpenEnum.Closed>
        <Setter Property="Background" TargetName="TheName" Value="Green"/>
   </DataTrigger>

  </DataTemplate.Triggers>
</DataTemplate>

1 Ответ

1 голос
/ 05 февраля 2012

Несколько проблем здесь:

Вы должны использовать полный синтаксис при привязке к присоединенным свойствам.Что-то вроде:

<DataTrigger Binding="{Binding Path=(common:IsOpen), Rela....

Далее, использование RelativeSource={RelativeSource Self}, вероятно, даст вам ContentPresenter, который находится в шаблоне управления ContentControl, когда вы на самом деле ищете свойство в ContentControl.Вместо этого используйте

....RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentControl}}...

Наконец, для краткости, опустите common:IsOpenEnum. из значения.Используйте только значение перечисления:

....Value="Open">

[Я считаю, что отсутствие кавычек для значения - это сбой, и они появляются в реальном коде]

...