简体   繁体   English

有没有办法做 ListViewHeaderItem 到底做什么?

[英]Is there a way to do what ListViewHeaderItem exactly do?

I want to realize a custom view just like ListView .我想实现一个自定义视图,就像ListView一样。

Now the problem is I want get a Tapped event from group header, maybe more.现在的问题是我想从组 header 中获得一个 Tapped 事件,也许更多。
It always creates GroupItem as group view, and can't be change.它总是将 GroupItem创建为组视图,并且不能更改。

I found what ListView do is create ListViewHeaderItem by the system and added to the visual tree when realizing the GroupStyle.HeaderTemplate .我发现 ListView 所做的是由系统创建ListViewHeaderItem并在实现GroupStyle.HeaderTemplate时添加到可视化树中。 My question is any way to do this?我的问题是有什么方法可以做到这一点?

cs: CS:

public class CustomView : ItemsControl

xaml: xaml:

<CollectionViewSource x:Name="itemCVS" IsSourceGrouped="True" 
               Source="{x:Bind Groups}" ItemsPath="Items"/>
...
<CustomView ItemsSource="{x:Bind itemCVS.View}">
  <CustomView.GroupStyle>
    <GroupStyle.HeaderTemplate>
      <DataTemplate>
        <TextBlock Text="{Binding}"/>
      </DataTemplate>
    </GroupStyle.HeaderTemplate>
    <GroupStyle.Panel>
      <ItemsPanelTemplate>
        <CustomPanel/>
      </ItemsPanelTemplate>
    </GroupStyle.Panel>
  </CustomView.GroupStyle>
</CustomView>

CustomView Visual Tree: CustomView 可视化树:

CustomView
 Windows.UI.Xaml.Controls.Border
  Windows.UI.Xaml.Controls.ScrollViewer
   Windows.UI.Xaml.Controls.Border
    Windows.UI.Xaml.Controls.Grid
     Windows.UI.Xaml.Controls.ScrollContentPresenter
      Windows.UI.Xaml.Controls.ItemsPresenter
       Windows.UI.Xaml.Controls.ContentControl
       CustomPanel
        Windows.UI.Xaml.Controls.GroupItem
         Windows.UI.Xaml.Controls.Grid
          Windows.UI.Xaml.Controls.ContentControl
           Windows.UI.Xaml.Controls.ContentPresenter
            Windows.UI.Xaml.Controls.TextBlock
          Windows.UI.Xaml.Controls.ItemsControl
           Windows.UI.Xaml.Controls.ItemsPresenter
            Windows.UI.Xaml.Controls.ContentControl
            CustomPanel
             Item 1
             Item 2

ListView Visual Tree: ListView 可视化树:

Windows.UI.Xaml.Controls.ListView
 Windows.UI.Xaml.Controls.Border
  Windows.UI.Xaml.Controls.ScrollViewer
   Windows.UI.Xaml.Controls.Border
    Windows.UI.Xaml.Controls.Grid
     Windows.UI.Xaml.Controls.ScrollContentPresenter
      Windows.UI.Xaml.Controls.ItemsPresenter
       Windows.UI.Xaml.Controls.ContentControl
       Windows.UI.Xaml.Controls.ItemsStackPanel
        Windows.UI.Xaml.Controls.ListViewHeaderItem
        Windows.UI.Xaml.Controls.ListViewHeaderItem
        Windows.UI.Xaml.Controls.ListViewItem 1
        Windows.UI.Xaml.Controls.ListViewItem 2

You code has generated the HeaderItem.您的代码已生成 HeaderItem。

Because your CustomerView inherits from ItemsControl , the generated HeaderItem has no style.因为您的 CustomerView 继承自ItemsControl ,所以生成的 HeaderItem 没有样式。

So if you want to do this, please manually add to change the style like following.因此,如果您想这样做,请手动添加以更改样式,如下所示。

<CustomerView.GroupStyle>
    <GroupStyle>
        <GroupStyle.HeaderTemplate>
            <DataTemplate>
                <ListViewHeaderItem>
                    <StackPanel>
                        <TextBlock Text="{Binding Key}"/>
                    </StackPanel>
                </ListViewHeaderItem>
            </DataTemplate>
        </GroupStyle.HeaderTemplate>
    </GroupStyle>
 </CustomerView.GroupStyle>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM