Din*_*ira 9 c# xaml windows-runtime winrt-xaml win-universal-app
我正在尝试在通用应用程序(WinRT)上创建"datagrid like"控件.
此控件必须显示许多元素(单元格),但只有一个小的视图区域,因此它是虚拟化的完美候选,它绝对需要它.
对于这样的事情,我如何能够横向和纵向进行虚拟化?

我尝试过使用ListView,GridView和ItemsControl.我显然设法只使用垂直或仅水平虚拟化.
我必须做的最重要的事情是实现单向虚拟化并让它看起来像一个表,将其中任何一个(ListView/GridView/ItemsControl)的ItemsPanel更改为以下内容:
<ScrollViewer
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto"
HorizontalScrollMode ="Auto"
VerticalScrollMode ="Auto"
ZoomMode="Disabled"
ViewChanged="DataGridView_OnViewChanged"
Width="700">
<ItemsControl
VerticalAlignment="Top"
HorizontalAlignment="Left"
ItemsSource="{Binding Cells}"
Width="{Binding DataGridWidth}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid MaximumRowsOrColumns="{Binding NumberOfColumns}"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ItemWidth="{Binding CellWidth}"
ItemHeight="{Binding CellHeight}"
CacheLength="2.0"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
...
</ItemsControl>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
注意:"VirtualizingStackPanel.VirtualizationMode"和"CacheLenght"在那里并不是必需的.但请注意,我在ScrollViewer和ItemsControl上设置了Width.我认为这是使虚拟化仅在一个方向上的罪魁祸首.因为我给ItemsControl足够的空间来显示项目.问题是,这是使MaximumRowsOrColumns工作并实现"DataGrid like"控件的唯一方法.
这个解决方案开始变得缓慢/破碎,大约100 x 100个元素,因为即使它只显示10行,它仍然是10x100个单元格.
Cell都具有相同的外观和感觉,因此共享相同的DataTemplate,这应该有助于获得解决方案.
我可以使用任何Control,我只提到了ListView,GridView和ItemsControl,因为它们对我来说更明显(解决这个问题).
关于如何使用XAML/C#在Windows Universal Apps上使用"DataGrid like"控件实现双向(水平和垂直)虚拟化的任何想法?
注2:WPF解决方案可能不适用于WinRT XAML/C#.请在发布WPF解决方案之前检查一下.
我没有这样做,但发现了一些有趣的文章:
1)您的网格位于 ScrollViewer 中,尝试使用 VirtualizingStackPanel.VirtualizationMode 等附加属性怎么样?
2)如果前面的方法不适合您,我想您可以使用增量虚拟化文章来编写自己的虚拟化机制(我真的认为它们可以用于此目的)。
链接:https ://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh780657.aspx
| 归档时间: |
|
| 查看次数: |
697 次 |
| 最近记录: |