WPF - 如何让某些ListView项跨越列?

Pet*_*asi 4 wpf listview gridview gridviewcolumn

我有一组数据,我想以这种方式通过WPF ListView呈现:

Column1   Column2   Column3
--GroupName1--
Item1     part2     part3
Item2     part2     part3
--GroupName2--
Item3     part2     part3
Item4     long_text_in_both_columns
Item5     part2     part3
--GroupName1--
Item6     part2     part3
Item7     long_text_in_both_columns
--GroupName3--
Item8     part2     part3

我开始使用这个基本示例:http://msdn.microsoft.com/en-us/library/ms771309(VS.90).aspx

上面的Item4和Item7有长文本,我想跨越剩余的列(忽略原始列标题的用途).我怎样才能做到这一点?

我已经使用DataTrigger进行了一些XAML设置,以使用自定义TextBlock替换默认的GridViewRowPresenter,但这并不是我想要的.我需要正常显示第1列中的数据并识别第一列的宽度.

Pet*_*asi 7

以下是我最终使用正确的ListView解决这个问题的方法:

        <ListView.ItemContainerStyle >
            <Style TargetType="ListViewItem">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ShowAcrossColumns}" Value="True">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type ListViewItem}">
                                    <Grid>
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="{Binding ElementName=myListView, Path=View.Columns[0].Width}" />
                                                <ColumnDefinition Width="*" />
                                            </Grid.ColumnDefinitions>
                                            <TextBlock Grid.Column="0" Padding="6,3,6,3" Text="{Binding Column1Text}" />
                                            <TextBlock Grid.Column="1" Padding="6,3,6,3" Text="{Binding ColumnSpanningText}" />
                                        </Grid>
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListViewItem}">
                            <Grid>
                                <GridViewRowPresenter />
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListView.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

关键是DataTriggered模板不使用GridViewRowPresenter,而是假装使用它自己的网格.必须猜测一些填充/边距与GridViewRowPresenter内部使用的匹配.另一个棘手的部分是将内部Grid列绑定到整个ListView列宽度.然后调整列的大小按预期工作.