WPF Textwrapping 触发 ListView IsSelected 状态
WPF Textwrapping trigger on ListView IsSelected state
我正在制作一个具有列表视图的 xaml 应用程序。当文本很长时,我使用 textTrimming 来缩短它,但是当用户单击该项目时,我希望 TextWrapping 属性从 nowrap 更改为 wrap。
这是我目前所拥有的:
<Listview>
<Listview.View>
<GridView>
<GridViewColumn Header="Name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock x:Name="WordWrap" Text="{Binding Name}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis"></TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</Listview.View>
</Listview>
我有一个包含样式的单独覆盖文件,它正在设置其他控件模板触发器和数据触发器,这是我在那里尝试过的:
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, ElementName=WordWrap}" Value="True">
<Setter Property="TextWrapping" Value="Wrap" />
</DataTrigger>
</Style.Triggers>
</Gridview>
我收到此错误:无法识别或访问成员 "TextWrapping"。
请让我知道任何解决方案或修复! xaml 和 WPF 仍然很新。
在关闭数据模板之前关闭文本块标记后,请尝试在此处添加触发代码,除非将其更改为而不是样式。
TextBlock 控件没有 IsSelected 属性 因此您的 DataTrigger 永远不会按原样发生。 IsSelected 是包含 ListViewItem 的 属性,因此您可以使用 RelativeSource 将触发器绑定更改为该绑定。例如:
<TextBlock x:Name="WordWrap" Text="{Binding}" TextTrimming="CharacterEllipsis">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="TextWrapping" Value="NoWrap"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" Value="True">
<Setter Property="TextWrapping" Value="Wrap"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
此外,为了更改触发器中的 属性,它不能在元素属性中进行硬编码,因此也将原始 TextWrapping 移动到样式中。
我正在制作一个具有列表视图的 xaml 应用程序。当文本很长时,我使用 textTrimming 来缩短它,但是当用户单击该项目时,我希望 TextWrapping 属性从 nowrap 更改为 wrap。 这是我目前所拥有的:
<Listview>
<Listview.View>
<GridView>
<GridViewColumn Header="Name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock x:Name="WordWrap" Text="{Binding Name}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis"></TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</Listview.View>
</Listview>
我有一个包含样式的单独覆盖文件,它正在设置其他控件模板触发器和数据触发器,这是我在那里尝试过的:
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, ElementName=WordWrap}" Value="True">
<Setter Property="TextWrapping" Value="Wrap" />
</DataTrigger>
</Style.Triggers>
</Gridview>
我收到此错误:无法识别或访问成员 "TextWrapping"。
请让我知道任何解决方案或修复! xaml 和 WPF 仍然很新。
在关闭数据模板之前关闭文本块标记后,请尝试在此处添加触发代码,除非将其更改为而不是样式。
TextBlock 控件没有 IsSelected 属性 因此您的 DataTrigger 永远不会按原样发生。 IsSelected 是包含 ListViewItem 的 属性,因此您可以使用 RelativeSource 将触发器绑定更改为该绑定。例如:
<TextBlock x:Name="WordWrap" Text="{Binding}" TextTrimming="CharacterEllipsis">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="TextWrapping" Value="NoWrap"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" Value="True">
<Setter Property="TextWrapping" Value="Wrap"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
此外,为了更改触发器中的 属性,它不能在元素属性中进行硬编码,因此也将原始 TextWrapping 移动到样式中。