Xaml 更改GridView中TextBlock的TextWrapping属性
我有一个Xaml 更改GridView中TextBlock的TextWrapping属性,xaml,uwp,Xaml,Uwp,我有一个网格视图,带有文本块和按钮。目前,GridView的DataTemplate的MinWidth是固定的。TextBlockss的TextWrapping属性设置为Wrap 看起来像 最后一个DataTemplate有更多文本要显示(包装处于启用状态) 我想做的是,如果我点击一个文本块,它有更多的文本显示,然后它会扩大(高度)显示全文。为此,我想在点击时切换其TextWrapping属性。但它似乎不是这样工作的 这是我的XAML: <GridView Name="TagsGridV
网格视图
,带有文本块
和按钮
。目前,GridView
的DataTemplate
的MinWidth
是固定的。TextBlock
ss的TextWrapping
属性设置为Wrap
看起来像
最后一个DataTemplate
有更多文本要显示(包装处于启用状态)
我想做的是,如果我点击一个文本块,它有更多的文本显示,然后它会扩大(高度)显示全文。为此,我想在点击时切换其TextWrapping
属性。但它似乎不是这样工作的
这是我的XAML:
<GridView Name="TagsGridView"
ItemsSource="{x:Bind TagsList, Mode=OneWay}"
SelectionMode="None">
<GridView.ItemTemplate>
<DataTemplate x:DataType="x:String">
<Grid Background="#1A503E"
MinWidth="150">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{x:Bind}"
Grid.Column="0"
Height="Auto"
TextTrimming="CharacterEllipsis"
TextWrapping="Wrap"
VerticalAlignment="Center"
Foreground="White"
Padding="10"
Tapped="TextBlock_Tapped"/>
<Button Content=""
Name="btnTagDelete"
Click="btnTagDelete_Click"
Foreground="White"
Grid.Column="1"
Width="40"
Height="40"
FontFamily="Segoe MDL2 Assets"/>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
这会导致textblock显示更多的文本,但不会更改所有文本未显示的高度。我还试图任意增加TextBlock
的高度,如下所示:
private void TextBlock_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
{
var textBlock = sender as TextBlock;
textBlock.Height = 1000;
}
这样做确实会使模板的高度增加20(单位),但是TextBlock
内的Text
变为空白
实现我想要的东西的正确方法是什么?网格视图中的每个项目都具有默认的
ItemTemplate
高度和宽度完全相同。如果不需要虚拟化,请尝试使用VariableSizedWrapGrid
代替。如上所述,如果没有给定固定大小,默认的GridView面板(ItemsWrapGrid)将项目大小调整为第一个项目的大小。但是,如果不需要虚拟化,那么与VariableSizedWrapGrid相比,您更适合一些WrapPanel的实现。如果你这样做。。。您必须手动处理它。@是否提供切换功能?切换应由每个标记控件处理。而且@JohnnyWestlake是对的,这里的WrapPanel
是一个更好的选择。实际上,我使用来自的WrapPanel
实现了几乎完全相同的标记UI。我只建议不要将它们包装成多行,可以尝试只使用一行,但默认情况下会修剪文本,并在点击时扩展到全宽。因为如果一个项目更高,你会在用户界面上留下很多空白,看起来不太好。
private void TextBlock_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
{
var textBlock = sender as TextBlock;
textBlock.Height = 1000;
}