大佬教程收集整理的这篇文章主要介绍了wpf – 当存在基于触发器隐藏显示元素的复杂数据模板时,我的ListView或ListBox控件大小不会缩小?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
<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>
外部网格的第二行应用了一个样式,如下所示.样式的目的是公开所选数据项的详细视图:
<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,AncestorType={x:Type ListViewItem} } }" Value="True"> <Setter Property="Grid.Visibility" Value="Visible" /> </Datatrigger> </Style.triggers> </Style>
ListView呈现如下:
当没有选择任何元素时,所需的外观是这样的:
…当然,当通过选择使第二个网格可见时,ListView的高度调整以适应附加内容.我该怎么做才能获得理想的行为?
我们下载了一个查询WPF布局的工具,并将该容器标识为ListView中的“Virtualizing Stack Panel”元素.
在后续电子邮件中,他写道:“这是VirtualizingStackPanel的错误.我已经开了一个关于它的错误.希望它可以在将来的版本中修复.解决方法(使用StackPanel)现在应该没问题,只要您不需要ListView来虚拟化其内容.
该错误涉及VSP测量算法中的一个步骤,该算法记住发现的最大尺寸,并强制所有未来的测量调用报告大小至少一样大.在您的情况下,VSP最初是在触发任何触发器之前测量的,因此它会计算大小,就像所有内容都可见一样.当触发器触发并折叠按钮时,度量算法会计算正确的(小)大小,但会强制结果再次变大.评论说明了在滚动时避免不必要的重新布局,但即使没有滚动,代码仍在运行.“
<ListView.ItemsPanel> <ItemsPanelTemplate> <StackPanel/> </ItemsPanelTemplate> </ListView.ItemsPanel>
这导致列表行为按预期工作,但它具有不具备VirtualizingStackPanel的内存管理功能的缺点.对我来说,这是合适的;列表项目一次不会超过2000左右.
以上是大佬教程为你收集整理的wpf – 当存在基于触发器隐藏显示元素的复杂数据模板时,我的ListView或ListBox控件大小不会缩小?全部内容,希望文章能够帮你解决wpf – 当存在基于触发器隐藏显示元素的复杂数据模板时,我的ListView或ListBox控件大小不会缩小?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。