1

我正在研究使用模式设置为“回收”的 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 似乎没有更新其布局。

4

0 回答 0