2010-05-22 3 views
0

У меня есть 2 DataTemplate s (A & B). A содержит Expander, а номер HeaderTemplate экспандера указан в другом DataTemplate (B).WPF DataTemplate Trigger задает свойство в другом DataTemplate

DataTemplate B показано ниже:

<DataTemplate x:Key="ProjectExpanderHeader"> 
     <Border CornerRadius="2,2,0,0" 
       Background="{StaticResource ItemGradient}" 
       HorizontalAlignment="{Binding HorizontalAlignment, 
               RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentPresenter}}, 
               Mode=OneWayToSource}"> 
      <local:ItemContentsUserControl Height="30"/> 
     </Border> 
    </DataTemplate> 

Можно ли установить CornerRadius из Б Border когда IsExpanded свойство-х Expander устанавливается истина?

Заранее спасибо.

ответ

1

Я нашел свое решение. Я добавил следующий код в триггеры DataTemplateB. Что он делает, так это поиск элемента управления расширителя предка и применяет к нему свойство CornerRadius.

 <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}},Path=IsExpanded}" Value="false"> 
       <Setter TargetName="ProjectExpanderHeader" Property="CornerRadius" Value="2,2,2,2"/> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
1

Вы можете сделать это, введя новое свойство attched типа CornerRadius (например, Helper.CornerRadiusProperty) и прикрепите его к родительскому элементу вашего ExpanderHeader где-нибудь в DataTemplate A. Вы устанавливаете это свойство на основе IsExpanded с помощью триггера.

В вашем DataTemplate B вы связать CornerRadius вашей границы к этому свойству с помощью FindAncestor:

<Border CornerRadius="{Binding local:Helper.CornerRadius, 
      RelativeSource={RelativeSource FindAncestor, 
      AncestorType={x:Type ContentPresenter}} ... 

В приведенном выше примере предполагается, что вы установили свойство Helper.CornerRadius на ContentPresenter в DataTemplate А.

+0

Спасибо за ответ, не могли бы вы немного расширить свой ответ. Я довольно новичок в WPF, и многие термины, о которых вы говорите, новы для меня. Если бы вы могли натолкнуться на немного mor ecode, чтобы расширить пример, это было бы здорово. Еще раз спасибо ... – Burt

1

Почему бы не использовать триггеры?

<DataTemplate> 
     <Border CornerRadius="2,2,0,0" 
       Background="{StaticResource ItemGradient}" 
       HorizontalAlignment="{Binding HorizontalAlignment, 
              RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentPresenter}}, 
              Mode=OneWayToSource}"> 

      <Border.Style> 
       <Style> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding DataTemplateA.IsExpanded}" 
            Value="True"> 
          <Setter Property="Border.CornerRadius" 
            Value="2,2,0,0" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Border.Style> 
      <local:ItemContentsUserControl Height="30" /> 
     </Border> 
    </DataTemplate> 
+0

Конечно, вам нужно будет привязать привязку к DataTrigger, но приспособившись к вашему решению, оно должно работать. – esylvestre