我需要为ListView中的特定部分/组使用其他面板。我该怎么做(使用XAML,C#或其他方法)?我已经尝试过使用GroupedStyleSelector
了,但是没有用(我对此进行了研究,但是事实证明,它并不是为此目的而设计的)。这是我现在的XAML:
<ListView ItemsSource="{Binding Source={StaticResource cvs}}">
<ListView.GroupStyle>
<GroupStyle HidesIfEmpty="True">
<GroupStyle.Panel>
<ItemsPanelTemplate>
// I want to change this for a particular group
<uwp:SGStaggeredPanel/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
我正在考虑对面板进行子类化,但是问题是如何获得对当前组的引用?
答案 0 :(得分:1)
https://docs.microsoft.com/en-us/windows/communitytoolkit/extensions/listviewbase
以上文章讨论了一种WCT好东西,它允许您动态更改将要呈现的项目的模板,此特定示例是静态表示的扩展,它仅用作列表视图的附加属性并循环浏览两种不同的模板
但是您可以轻松地将ListView扩展到模板控件中,然后更轻松地访问包含您的Itemsource的Viewmodel,从那时起您可以继续更改
private static void ItemTemplateContainerContentChanging(Windows.UI.Xaml.Controls.ListViewBase sender, ContainerContentChangingEventArgs args)
这是发生所有魔术的地方。
实施说明
如果您不了解mvvm和绑定,请不要忘记阅读并继续学习。
所有没有明确定义数据上下文的子控件都将继承其父级。
通过跟踪传入的args.ItemIndex,然后将其与基础数据上下文中包含的绑定源(可观察到的列表等)进行交叉检查,您将能够映射上述函数中的传入控件。
要将其转换为被篡改/自定义的控件,您将必须像MyListview:ListView这样的实现自己的ListView实现
必须将Dependency属性转换为常规属性, 只需键入“ propdp”并双击Tab,即可调出默认模板。
您仍然必须引用XAML中所有不同的DataTamplates,如下面列出的展示应用程序中所示。
在您的情况下,不需要多余的展示代码,例如不需要拉伸方向和斑马条纹。
这是我所讨论的代码的确切位置,可以进行实际操作并进行操作,可以从商店中下载“ Windows Community Toolkit”,位于“扩展”部分。