Rob*_*ins 3 silverlight wpf height xaml listview
我有一个ListView元素,每个ListViewItem都有一个DataTemplate定义如下.运行时,ListView的高度不会折叠到视图中的项目上,这是不合需要的行为:
<DataTemplate x:Key="LicenseItemTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{Binding company}"></TextBlock>
<Grid Grid.Row="1" Style="{StaticResource HiddenWhenNotSelectedStyle}">
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Button Grid.Row="0">ClickIt</Button>
</Grid>
</Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
外部网格的第二行应用了一个样式,如下所示.样式的目的是公开所选数据项的详细视图:
<Style TargetType="{x:Type Grid}" x:Key="HiddenWhenNotSelectedStyle" >
<Style.Triggers>
<DataTrigger
Binding="{Binding Path=IsSelected,
RelativeSource={
RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListViewItem}
}
}"
Value="False">
<Setter Property="Grid.Visibility" Value="Collapsed" />
</DataTrigger>
<DataTrigger
Binding="{Binding Path=IsSelected,
RelativeSource={
RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListViewItem}
}
}"
Value="True">
<Setter
Property="Grid.Visibility"
Value="Visible"
/>
</DataTrigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
ListView呈现如下:
当没有选择任何元素时,所需的外观是这样的:
...当然,当通过选择使第二个网格可见时,ListView的高度调整以适应附加内容.我该怎么做才能获得理想的行为?
Rob*_*ins 15
在TechEd讨论WPF人员的问题时,我向微软员工展示了这个问题.他不知所措.
我们下载了一个查询WPF布局的工具,并将该容器标识为ListView中的"Virtualizing Stack Panel"元素.
在后续电子邮件中,他写道:"这是VirtualizingStackPanel的错误.我已经打开了一个关于它的错误.希望它可以在将来的版本中修复.解决方法(使用StackPanel)现在应该没问题,只要您不需要ListView来虚拟化其内容.
该错误涉及VSP测量算法中的一个步骤,该算法记住发现的最大尺寸,并强制所有未来的测量调用报告大小至少一样大.在您的情况下,VSP最初是在触发任何触发器之前测量的,因此它会计算大小,就像所有内容都可见一样.当触发器触发并折叠按钮时,度量算法会计算正确的(小)大小,但会强制结果再次变大.该评论说明了在滚动时避免不必要的重新布局,但即使没有滚动,代码仍在运行."
解决方法涉及使用以下代码重新模板化ListView:
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
Run Code Online (Sandbox Code Playgroud)
这导致列表行为按预期工作,但它具有不具备VirtualizingStackPanel的内存管理功能的缺点.对我来说,这是合适的; 列表项目一次不会超过2000左右.
| 归档时间: |
|
| 查看次数: |
2154 次 |
| 最近记录: |