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 移动到样式中。