C# 虚拟化文件面板背景滚动

C# 虚拟化文件面板背景滚动,c#,wpf,listview,virtualization,C#,Wpf,Listview,Virtualization,我正在尝试创建一个看起来像书架的视图,通过虚拟化将物品放在书架上。我可以通过在我的列表视图中添加虚拟化文件面板类来实现这一点。我使用的课程来自Dan Crevier的博客: 我正在将虚拟化文件面板和背景添加到我的列表视图,如下所示: <ListView.ItemsPanel> <ItemsPanelTemplate> <local:VirtualizingTilePanel> <local:Virtual

我正在尝试创建一个看起来像书架的视图,通过虚拟化将物品放在书架上。我可以通过在我的
列表视图中添加
虚拟化文件面板
类来实现这一点。我使用的课程来自Dan Crevier的博客:

我正在将
虚拟化文件面板
和背景添加到我的
列表视图
,如下所示:

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <local:VirtualizingTilePanel>
            <local:VirtualizingTilePanel.Background>
                <ImageBrush ImageSource="..\Images\bookshelf.png" AlignmentX="Left" AlignmentY="Top" TileMode="Tile" Stretch="None" ViewportUnits="Absolute" Viewport="0,0,319,203" />
            </local:VirtualizingTilePanel.Background>
        </local:VirtualizingTilePanel>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>
    public void SetHorizontalOffset(double offset)
    {       
        offsetX_ = offset;
        ((TileBrush)Background).Viewport = new Rect(-offsetX_, -offsetY_, width_, height_);
        ((TileBrush)Background).ViewportUnits = BrushMappingMode.Absolute;
    }

我的自定义面板implementing
IScrollInfo
也有类似的问题。在我的实现中,后台根本没有移动(我认为您的后台移动是因为您正在设置
RenderTransform
)。最后,我在
SetHorizontalOffset
/
SetVerticalOffset
中手动更新指定画笔上的视口,如下所示:

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <local:VirtualizingTilePanel>
            <local:VirtualizingTilePanel.Background>
                <ImageBrush ImageSource="..\Images\bookshelf.png" AlignmentX="Left" AlignmentY="Top" TileMode="Tile" Stretch="None" ViewportUnits="Absolute" Viewport="0,0,319,203" />
            </local:VirtualizingTilePanel.Background>
        </local:VirtualizingTilePanel>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>
    public void SetHorizontalOffset(double offset)
    {       
        offsetX_ = offset;
        ((TileBrush)Background).Viewport = new Rect(-offsetX_, -offsetY_, width_, height_);
        ((TileBrush)Background).ViewportUnits = BrushMappingMode.Absolute;
    }

您首先需要在笔刷项上设置
ViewboxUnits=BrushMappingMode.Absolute

能否提供
virtualizengtilepanel
的完整示例?@anatolynikolaev已添加。在您的示例中,我无法进行滚动。如何启用垂直滚动?我正在尝试在
列表视图中添加高度,但没有帮助。问题的问题:)。只需继续添加项目,直到一个屏幕上显示的内容超过视图所能显示的内容,滚动将自动启用。