我正在处理的应用程序窗口中有一个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事件,但无法锻炼如何更改文本值。非常感谢任何帮助。
答案 0 :(得分:2)
如果您希望在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
,否则触发器将无法覆盖该值