2

次のXAMLスニペットがあります。

<ItemsControl ItemsSource="..." ItemTemplate="..." VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Standard" ScrollViewer.CanContentScroll="True">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel Orientation="Vertical" utils:VirtualizingStackPanelAttachedProperties.IsPixelBasedScrollingEnabled="True"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.Template>
        <ControlTemplate>
            <Border BorderThickness="..." Padding="..." BorderBrush="..." Background="..." SnapsToDevicePixels="True">
               <ScrollViewer Padding="..." Focusable="False">
                   <ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
               </ScrollViewer>
            </Border>
        </ControlTemplate>
    </ItemsControl.Template>
</ItemsControl>

ご覧のとおり、ScrollViewer.CanContentScroll = "True"とutils:VirtualizingStackPanelAttachedProperties.IsPixelBasedScrollingEnabled = "True"(ここで提案されているように、IsPixelBased内部プロパティをtrueに設定する添付プロパティです)があります。

これは、スクロールがきめ細かいピクセルベースのWindowsXPで期待どおりに機能します。
ただし、これは、スクロールがまだアイテムベースであるWindows 7では期待どおりに機能しません。これは、上記の添付プロパティをTrueに設定していない場合のWindowsXPと同じです。
Windows 7でピクセルベースのスクロールを機能させる唯一の方法は、CanContentScrollをFalseに設定することでしたが、これは仮想化をオフにします。

なぜこれが起こるのか考えていますか?どういうわけか、Windows XPでは、仮想化が有効になっているにもかかわらず、仮想化が実際に機能していないというのは事実ですか?

4

1 に答える 1

2

内部プロパティがfalseに戻されている可能性があります。CLR 4.5のそのリンクで述べられているように、ScrollUnitをピクセルに設定します。したがって、そのシステムにClr 4.5があり、それがピクセルに設定されていないため、IsPixelBasedが元に戻されている可能性があります。添付の動作を変更して、ScrollUnitが存在する場合はそれを設定できます。

于 2013-01-16T02:24:40.597 に答える