更改Expander HeaderTemplate内容

本文关键字:内容 HeaderTemplate Expander 更改 | 更新日期: 2023-09-27 18:06:48

我在一个应用程序的窗口上有一个扩展器,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>

现在我想要做的是改变HeaderTemplateTextBlock元素的Text属性,我有一个窗口和扩展器的主题,我尝试过使用Header,但这没有达到预期的结果,主题有动画,当使用标题时,我失去了动画。我还尝试使用展开和折叠事件,但无法锻炼如何更改文本值。如有任何帮助,不胜感激。

更改Expander HeaderTemplate内容

如果您想在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设置它,否则trigger将无法覆盖