更改 Expander HeaderTemplate 内容

Change Expander HeaderTemplate content

我在我正在处理的应用程序中的 window 上有一个扩展器,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>

而 header 模板 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>

现在我想做的是更改 HeaderTemplateTextBlock 元素的 Text 属性,我有一个主题window 和扩展器,我尝试使用 Header 但这没有达到预期的效果,主题有动画,当使用 Header 时我失去了动画。我也尝试过使用 Expanded 和 Collapsed 事件,但无法锻炼如何更改文本值。非常感谢任何帮助。

如果您希望在 Expander 打开或关闭时显示不同的文本,您可以使用 DataTriggerRelativeSource 绑定并在 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 值作为另一个 setter 而不是直接针对 TextBlock 设置它,否则触发器将无法覆盖值