infinat 2014-02-18 02:25 采纳率: 0%
浏览 876

Winform 下Listview的改造

Listview 在分组的情况下,如何才能实现如下两种效果:
1、Group header的点击事件
2、Group下若无item,依然强制显示Group?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 18:42
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在 WinForms 中,ListView 的 GroupHeader 和 GroupFooter 属性用于设置和获取列表视图中行标题(Group Header)和行脚注(Group Footer)的文本。以下是一个简单的示例,展示了如何使用这些属性来实现您所描述的效果。

    首先,创建一个包含数据的数据源:

    public class DataObject {
        public string Name { get; set; }
        public int Value { get; set; }
    }
    

    然后,在 ListView 控件上添加 GroupHeader 和 GroupFooter:

    <ControlTemplate x:Key="DataViewGroupHeaderTemplate">
        <Border Background="#ffffff" BorderBrush="#000000" BorderThickness="0,0,0,1">
            <TextBlock Text="{Binding Path=Name}" Margin="5" FontSize="16"/>
        </Border>
    </ControlTemplate>
    
    <ControlTemplate x:Key="DataViewGroupFooterTemplate">
        <Border Background="#ffffff" BorderBrush="#000000" BorderThickness="0,0,0,1">
            <TextBlock Text="{Binding Path=Value}" Margin="5" FontSize="16"/>
        </Border>
    </ControlTemplate>
    

    接下来,使用 DataTemplate 来定义每个 GroupHeader 和 GroupFooter 的模板:

    <DataTemplate x:Key="DataViewGroupHeaderItemTemplate">
        <TextBlock Text="{Binding Path=Name}" Margin="5" FontSize="16"/>
    </DataTemplate>
    
    <DataTemplate x:Key="DataViewGroupFooterItemTemplate">
        <TextBlock Text="{Binding Path=Value}" Margin="5" FontSize="16"/>
    </DataTemplate>
    

    最后,为 ListView 添加 GroupHeader 和 GroupFooter:

    <ListView Grid.Row="1">
        <ListView.GroupHeaderTemplate> 
            <DataTemplate>
                <DataGridCellTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Button Content="<" Command="{x:Static SystemCommands.OpenInExplorer}" />
                        <DataTemplateSelector>
                            <DataTemplate>
                                <DataGridCellTemplate>
                                    <TextBlock Text="{Binding Path=Name}" Margin="5" FontSize="16"/>
                                </DataGridCellTemplate>
                            </DataTemplate>
                        </DataTemplateSelector>
                    </StackPanel>
                </DataGridCellTemplate>
            </DataTemplate>
        </ListView.GroupHeaderTemplate>
    
        <ListView.GroupFooterTemplate>
            <DataTemplate>
                <DataGridCellTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Button Content="<" Command="{x:Static SystemCommands.OpenInExplorer}" />
                        <DataTemplateSelector>
                            <DataTemplate>
                                <DataGridCellTemplate>
                                    <TextBlock Text="{Binding Path=Value}" Margin="5" FontSize="16"/>
                                </DataGridCellTemplate>
                            </DataTemplate>
                        </DataTemplateSelector>
                    </StackPanel>
                </DataGridCellTemplate>
            </DataTemplate>
        </ListView.GroupFooterTemplate>
    </ListView>
    

    现在,当用户单击 GroupHeader 或 GroupFooter 的按钮时,它将打开一个新的文件或窗口以显示对应的值。同时,如果 GroupFooter 下没有 item,则仍然会强制显示 GroupFooter。

    评论

报告相同问题?