更改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>
现在我想要做的是改变HeaderTemplate
中TextBlock
元素的Text
属性,我有一个窗口和扩展器的主题,我尝试过使用Header
,但这没有达到预期的结果,主题有动画,当使用标题时,我失去了动画。我还尝试使用展开和折叠事件,但无法锻炼如何更改文本值。如有任何帮助,不胜感激。
如果您想在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
值作为另一个setter,而不是直接针对TextBlock
设置它,否则trigger将无法覆盖