调整大小时VirtualizingStackPanel的不稳定行为

时间:2012-05-13 16:35:02

标签: .net wpf virtualizingstackpanel

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

0 个答案:

没有答案