我正在研究使用模式设置为“回收”的 VirtualizingStackPanel 的自定义控件,我遇到了以下问题:http: //i.imgur.com/XoarX.png
当我“玩”列宽度一段时间然后最大化窗口时,就会发生这种情况。我不知道是什么原因造成的。PrepareContainerForItemOverride 被调用,我检查了单元格宽度并且它是正确的,似乎包含单元格的 StackPanel 没有重新排列其内容,我不知道如何强制它这样做......
我知道我没有提供太多细节,但也许你们中的一些人有类似的问题,只是碰巧知道解决方案。
编辑: 相关部分的 XAML:
<Style x:Key="{x:Type dgp:CellsPresenter}" TargetType="{x:Type dgp:CellsPresenter}">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type dgp:CellsPresenter}">
<ItemsPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="{x:Type dg:Cell}" TargetType="{x:Type dg:Cell}">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}" />
<Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" />
<Setter Property="BorderThickness" Value="0,0,1,1" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type dg:Cell}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" />
</Trigger>
</Style.Triggers>
</Style>
每行(简单控件,与 XAML 无关)都包含 CellPresenter,并且行堆叠到 VirtualizingStackPanel 中。您可以在 ItemsPanelTemplate 中看到的具有水平方向的 StackPanel 似乎没有更新其布局。