0

我想实现一个自定义视图,就像ListView.

现在的问题是我想从组头中获取一个 Tapped 事件,也许更多。
它总是将 GroupItem创建为组视图,并且不能更改。

我发现 ListView 所做的是由系统创建ListViewHeaderItem并在实现GroupStyle.HeaderTemplate. 我的问题是有什么方法可以做到这一点?

CS:

public class CustomView : ItemsControl

xml:

<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 可视化树:

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 可视化树:

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
4

1 回答 1

0

您的代码已生成 HeaderItem。

因为您的 CustomerView 继承自ItemsControl,所以生成的 HeaderItem 没有样式。

因此,如果您想这样做,请手动添加以更改样式,如下所示。

<CustomerView.GroupStyle>
    <GroupStyle>
        <GroupStyle.HeaderTemplate>
            <DataTemplate>
                <ListViewHeaderItem>
                    <StackPanel>
                        <TextBlock Text="{Binding Key}"/>
                    </StackPanel>
                </ListViewHeaderItem>
            </DataTemplate>
        </GroupStyle.HeaderTemplate>
    </GroupStyle>
 </CustomerView.GroupStyle>
于 2021-01-19T09:59:32.533 回答