【发布时间】:2011-12-26 15:10:03
【问题描述】:
问题:一个带有 ItemsControl 和一些项目的窗口(比如说矩形)。 窗口设置了 MinWidth 和 MinHeight(例如 300) 如果矩形没有足够的空间来显示以显示在 2 列中,我需要在调整窗口大小时使用它。 如果在 2 列中仍然没有足够的空间来显示滚动查看器。
我尝试过的: 1.创建一个扩展的ItemsControl:
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<local:MyGrid IsItemsHost="True" x:Name="PART_ItemsPanel" Initialized="OnItemsPanelInitialized" CanVerticallyScroll="True" CanHorizontallyScroll="True">
<local:MyGrid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</local:MyGrid.ColumnDefinitions>
<local:MyGrid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</local:MyGrid.RowDefinitions>
</local:MyGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
我的 ItemsControl 作为 ItemsPanelTemplate 有一个扩展网格:
公共类 MyGrid : Grid, IScrollInfo { ....IScrollInfo 实现 }
我使用这个网格认为当 ItemsControl 将 PrepareContainerForItemOverride() 时,我可以使用它来将项目分成两列。
这个想法是从一次会议中“获取”的......但我不知道下一步该做什么...... 我有这样的问题: 当我为数据网格覆盖 Measure 和 Arrange 时,我在 DataGrid 中设置了项目的位置,但后来它被称为 PrepareContainerForItemOverride()...然后呢?我应该计算我应该做的行数?但是如果然后我再次调整窗口大小... PrepareContainerForItemOverride() 将不会被调用...
这个问题已经解决了...如果你们中的一些人有一个线索,请给我一个线索。 谢谢各位!
【问题讨论】:
标签: wpf scroll itemscontrol measureoverride arrangeoverride