C# ItemSource中具有不同数据类型的ListView多行列标题

C# ItemSource中具有不同数据类型的ListView多行列标题,c#,wpf,listview,C#,Wpf,Listview,问题的继续 我想实现这种列表视图: 它应该有两件事: 多行列标题 通过ItemsSource绑定的不同数据类型将以不同方式显示 为了解决(1)问题,我尝试使用HeaderTemplate: <ListView> <ListView.View> <GridView> <GridViewColumn Header="A" DisplayMemberBinding="{Binding A}">

问题的继续

我想实现这种
列表视图

它应该有两件事:

  • 多行列标题
  • 通过
    ItemsSource
    绑定的不同数据类型将以不同方式显示

  • 为了解决(1)问题,我尝试使用
    HeaderTemplate

    <ListView>
        <ListView.View>
            <GridView>
                <GridViewColumn Header="A" DisplayMemberBinding="{Binding A}">
                    <GridViewColumn.HeaderTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding}"/>
                        </DataTemplate>
                    </GridViewColumn.HeaderTemplate>
                </GridViewColumn>
    ...
    
    其中
    aaa
    是一些
    GridViewColumnCollection
    的键:

    <GridViewColumnCollection x:Key="aaa">
        <GridViewColumn Header="B" DisplayMemberBinding="{Binding B}"/>
        <GridViewColumn Header="C" DisplayMemberBinding="{Binding C}"/>
     </GridViewColumnCollection>
    
    它可以工作,我可以使用
    observateCollection
    绑定两种类型的对象(一种具有A、B、C属性,另一种具有D、E属性,这两种类型也具有
    模式
    属性),但是

    它与
    Mode=2
    项存在视觉问题<代码>列表视图外观(称为Vista)不是继承的,只是
    模式!=2
    项目有它。我说的是鼠标悬停在突出显示上并选择项目,当使用
    Mode=2执行此操作时,项目选择如下所示:

    A-AA
    是鼠标覆盖的(但没有突出显示),而
    B-BB
    是键盘焦点(用箭头键选择,如果我尝试用鼠标点击它,它也没有)

    当然,我可以添加触发器,但要做什么?改变背景颜色?它看起来一点都不像Vista!在这里,我尝试使用默认的
    ListViewItem
    模板颜色:

    <ControlTemplate.Triggers>
        <Trigger Property="Selector.IsSelected" Value="True">
            <Setter Property="Background" TargetName="PART_Panel">
                <Setter.Value>
                    <DynamicResource ResourceKey="{x:Static SystemColors.HighlightBrushKey}" />
                </Setter.Value>
            </Setter>
    ...
    
    
    ...
    
    但结果是。。令人失望:

    注意区别:
    2-22-222
    被选中(Vista风格),丑陋的
    A-AA
    也被选中

    问题:如何正确显示绑定为
    ItemSource
    的不同数据类型?如何保持漂亮的Vista风格?


    附言:我为一个有点(或很多)长的问题道歉。我可以将它分为几个部分,但我的目的是实现完整的
    列表视图
    ,我觉得所有这些都是相关的(删除任何内容都可能会以简化的方式解决此问题,不适合完整的解决方案)。

    您有多确定是否需要这种显示?你可能需要自己为某件如此具体的事情做一些渲染s@ThorSummoner,我不确定,但我愿意接受各种想法和妥协。如果我必须自己渲染东西,我会怎么做?我已经在wpf中制作了一些由所有者绘制的控件,但是
    ListView
    对我来说看起来相当复杂,尤其是像Vista风格这样的东西。是的,这会很复杂,但是如果你对你想要的东西的外观有一个明确的想法,那应该不会太糟糕。我不知道如何在wpf中做任何事情;但是,如果您已经找到了绘制自定义控件的方法,则可能需要执行类似的操作,计算出所有要显示的内容的所有空间以及它们如何包装和绘制的规则。但因为这太单调了,所以提供了ListView。如果可能的话,我鼓励您尝试以最传统的方式使用ListView;或者可能使用网格布局构建一些内容:\第二个问题已解决(或多或少),多行列标题仍处于打开状态,或者,是否有方法控制行的列宽,哪些内容位于
    画布内且未绑定到正常列?。我可能会问另外一个问题,然后删除这个问题。
    
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Mode}" Value="2">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ListViewItem">
                                <StackPanel x:Name="PART_Panel" Orientation="Horizontal">
                                    <TextBlock Text="{Binding D}"/>
                                    <TextBlock Text="{Binding E}" Margin="5,0"/>
                                </StackPanel>
    ...
    
    <ControlTemplate.Triggers>
        <Trigger Property="Selector.IsSelected" Value="True">
            <Setter Property="Background" TargetName="PART_Panel">
                <Setter.Value>
                    <DynamicResource ResourceKey="{x:Static SystemColors.HighlightBrushKey}" />
                </Setter.Value>
            </Setter>
    ...