我正在使用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似乎没有更新其布局。