问题:一个带有 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 :网格,IScrollInfo { ....IScrollInfo 实现 }
我使用这个网格认为当 ItemsControl 将 PrepareContainerForItemOverride() 时,我可以使用它来将项目拆分为两列。
这个想法是从会议中“采取”的......但我不知道下一步该做什么......我有这样的问题:当我为数据网格覆盖测量和排列时,我在 DataGrid 中设置了项目的位置,但是然后它被称为 PrepareContainerForItemOverride()...然后呢?我应该计算我应该做的行数?但是如果然后我再次调整窗口大小... PrepareContainerForItemOverride() 将不会被调用...
这个问题已经解决了我......如果你们中的一些人有一个线索,请给我一个线索。感谢你们!