【发布时间】:2016-09-03 23:38:02
【问题描述】:
我只是问了一个类似的问题,但我注意到我的不好,我需要隐藏整行而不仅仅是文本块。让我解释一下发生了什么。所以我有一个具有这种结构的 ListBox:
<ListBox VerticalAlignment="Stretch"
ItemsSource="{Binding EventInfo}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="20"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="Event:" FontWeight="Bold" Grid.Column="0" Grid.Row="0"/>
<TextBlock Text="{Binding Name}" FontWeight="Bold" Grid.Column="1" Grid.Row="0"/>
<TextBlock Text="Foo:" FontWeight="Bold" Grid.Column="0" Grid.Row="1"/>
<TextBlock Text="{Binding Foo}" FontWeight="Bold" Grid.Column="1" Grid.Row="1"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
所以我需要做的是隐藏所有包含 textblock/s 且值为 null 或空值的行,实际上我是这样在纯 xaml 中管理的:
<ListBox.Resources>
<Style TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="Text" Value="">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.Resources>
但这不是一个好的解决方案。事实上,你怎么能看到我每个 textblock 都按行和列组织,所以我需要隐藏包含具有 null 值的文本块的行。
使用我的解决方案,我只隐藏具有 null 值的文本块,这是没用的,因为该值已经为空或 null。
有机会通过xaml来管理吗?我不知道如何在 xaml 中执行此操作,因为例如,如果我在中间隐藏一行,我将得到一个空白区域,该行包含非空值的文本块。我不知道情况是否清楚。
如果有不清楚的地方,请询问,我会尽力解释得更好。谢谢。
【问题讨论】: