我正在尝试创建具有完全功能性标题的列表,但似乎只能获得具有功能性标题的列表以及所有列表视图项目都简化为文本块的列表。或具有所有按钮和文本的样式完整但没有正确链接标题的列表视图。见下图;

c# - WPF GridViewRowPresenter将所有内容转换为文本块-LMLPHP

我的ListView定义对他们两个都是这样的:

              <ListView ItemsSource="{Binding ScenarioComponents}" Style="{StaticResource ListViewWithHeader}" ItemContainerStyle="{StaticResource ListViewWithHeaderItem}">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Width="Auto" Header="{Binding NameHeader}" DisplayMemberBinding="{Binding Name}"/>
                            <GridViewColumn Width="Auto" Header="{Binding TypeHeader}" DisplayMemberBinding="{Binding Type}"/>
                            <GridViewColumn Width="Auto" Header="{Binding InfoHeader}"/>
                            <GridViewColumn Width="Auto" Header="{Binding ExportHeader}"/>
                            <GridViewColumn Width="Auto" Header="{Binding DeleteHeader}"/>
                        </GridView>
                    </ListView.View>
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="5*"/>
                                    <ColumnDefinition Width="1.5*"/>
                                    <ColumnDefinition Width="0.5*"/>
                                    <ColumnDefinition Width="0.5*"/>
                                    <ColumnDefinition Width="0.5*"/>
                                </Grid.ColumnDefinitions>
                                <Label Grid.Column="0" Content="{Binding Name}" HorizontalAlignment="Left"/>
                                <Label Grid.Column="1" Content="{Binding Type}" Background="{StaticResource XVROrange}"/>
                                <Button Grid.Column="2" Style="{StaticResource BorderLessButton}" Command="{Binding MoreInfoCommand}">
                                    <Button.Content>
                                        <Image Source="/Views/Images/cc2_gui_information_default.png"/>
                                    </Button.Content>
                                </Button>
                                <Button Grid.Column="3" Style="{StaticResource BorderLessButton}" Command="{Binding ExportCommand}">
                                    <Button.Content>
                                        <Image Source="/Views/Images/cc2_gui_export_default.png"/>
                                    </Button.Content>
                                </Button>
                                <Button Grid.Column="4" Style="{StaticResource BorderLessButton}" Command="{Binding DeleteCommand}">
                                    <Button.Content>
                                        <Image Source="/Views/Images/cc2_gui_b_delete.png"/>
                                    </Button.Content>
                                </Button>
                            </Grid>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>


样式上的唯一区别是,标题工作的样式在ListViewItem中使用GridViewRowPresenter,如下所示:

        <Style x:Key="ListViewWithHeaderItem" TargetType="ListViewItem">
        <Setter Property="OverridesDefaultStyle" Value="true" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="Border" Padding="0" Background="Transparent" BorderBrush="{StaticResource XVR70}" BorderThickness="1">
                        <GridViewRowPresenter Content="{TemplateBinding Content}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


第二个仅使用ContentPresenter而不是GridViewRowPresenter使用相同的样式,而没有任何修饰。

         <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border Background="Transparent" BorderBrush="{StaticResource Black47}" BorderThickness="0,0,0,0">
                        <ContentPresenter />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>


由于某种原因,使用GridViewRowPresenter意味着ListView.ItemTemplate的DataTemplate gets turned into a Textblock中的每个项目。我不知道为什么。我真的更喜欢继续使用GridViewRowPresenter,因为这意味着标头已绑定到列表中的项目,并随其缩放。

有谁知道我如何设计它的风格?

最佳答案

您可以将模板从ItemTemplate放入GridViewColumns吗?

<ListView.View>
  <GridView>
    <GridView.Columns>
      <GridViewColumn Width="Auto" Header="{Binding NameHeader}" DisplayMemberBinding="{Binding Name}">
        <GridViewColumn.CellTemplate>
          <DataTemplate>
            <Label Grid.Column="0" Content="{Binding Name}" HorizontalAlignment="Left"/>
          </DataTemplate>
        </GridViewColumn.CellTemplate>
      </GridViewColumn>
      <!-- more columns -->
    </GridView.Columns>
  </GridView>
</ListView.View>

10-08 07:58