Изменить содержимое Expander HeaderTemplate

У меня есть Expander в окне приложения, над которым я работаю, Xaml выглядит следующим образом:

    <Border  Grid.Row="4" Grid.ColumnSpan="4" Grid.Column="0" BorderThickness="0,1,0,0" BorderBrush="Gray">
        <Grid>
            <Expander x:Name="ReleaseNotes" HeaderTemplate="{StaticResource ExpanderHeader}">                 
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="17"/>
                        <ColumnDefinition Width="300"/>
                        <ColumnDefinition Width="0" />
                    </Grid.ColumnDefinitions>
                    <ScrollViewer Height="150" Padding="0,0,5,0"  Grid.Column="1"  VerticalScrollBarVisibility="Auto">
                        <TextBlock  FontSize="10" Text="{Binding ReleaseNotesText}" TextWrapping="Wrap"/>
                    </ScrollViewer>
                </Grid>                
            </Expander>
        </Grid>
    </Border>

И шаблон заголовка Xaml:

    <Grid.Resources>
        <DataTemplate x:Key="ExpanderHeader">
            <TextBlock Text="Release notes">
                <TextBlock.Style>
                    <Style TargetType="{x:Type TextBlock}">
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Foreground" Value="#ffcc00"/>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </DataTemplate>
    </Grid.Resources>

Теперь то, что я хотел бы сделать, это изменить свойство Text элемента TextBlock в HeaderTemplate, у меня есть тема для окна и расширителя, я пытался использовать Header, но это не дает желаемых результатов, тема имеет анимацию, и при использовании заголовка я теряю анимацию. Я также пытался использовать события Expanded и Collapsed, но не могу понять, как изменить текстовое значение. Любая помощь очень ценится.


person Neil Stevens    schedule 06.08.2015    source источник
comment
привяжите свое свойство Text и измените его из ViewModel.   -  person Abin    schedule 06.08.2015
comment
@ Нил, как ты хочешь изменить текст? Разный текст для разных Expander или другой текст при открытии/закрытии?   -  person dkozl    schedule 06.08.2015
comment
другой текст при открытии/закрытии   -  person Neil Stevens    schedule 06.08.2015


Ответы (1)


Если вы хотите, чтобы другой текст отображался, когда Expander открыт или закрыт, вы можете использовать DataTrigger с привязкой RelativeSource и запускать IsExpanded, будучи истинным:

<DataTemplate x:Key="ExpanderHeader">
   <TextBlock>
      <TextBlock.Style>
         <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Text" Value="Closed"/>
            <Style.Triggers>
               <Trigger Property="IsMouseOver" Value="True">
                  <Setter Property="Foreground" Value="#ffcc00"/>
               </Trigger>
               <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Expander}}, Path=IsExpanded}" Value="True">
                  <Setter Property="Text" Value="Open"/>
               </DataTrigger>
            </Style.Triggers>
         </Style>
      </TextBlock.Style>
   </TextBlock>
</DataTemplate>

Не забудьте указать значение по умолчанию Text в качестве другого установщика вместо того, чтобы устанавливать его непосредственно против TextBlock, иначе триггер не сможет перезаписать значение.

person dkozl    schedule 06.08.2015