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;
}
我的自定义面板implementingIScrollInfo
也有类似的问题。在我的实现中,后台根本没有移动(我认为您的后台移动是因为您正在设置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已添加。在您的示例中,我无法进行滚动。如何启用垂直滚动?我正在尝试在列表视图中添加高度,但没有帮助。问题的问题:)。只需继续添加项目,直到一个屏幕上显示的内容超过视图所能显示的内容,滚动将自动启用。