我正在制作一个具有列表视图的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来说还是很新。
答案 0 :(得分:1)
TextBlock控件没有IsSelected属性,因此您的DataTrigger将永远不会原样发生。 IsSelected是包含的ListViewItem的属性,因此您可以使用RelativeSource将Trigger绑定更改为该绑定。例如:
<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也移到Style内。
答案 1 :(得分:0)
在关闭数据块之前,请先关闭textblock标签,然后再尝试在其中添加触发代码,除了将其更改为样式以外。