2017-08-01 43 views
2

我试图创建一个具有全功能标题的列表,但我似乎只能获得具有功能标题的列表以及所有列表视图项目减少为文本块。或者是一个列表视图,其中所有按钮和文字都是完全样式的,但没有正确链接标题。看到下面的图片;WPF GridViewRowPresenter将所有内容转换为文本块

enter image description here

我的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> 

而且在造型,唯一的区别是,一个有工作的头采用了GridViewRowPresenter在ListViewItem这样:

 <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而不是GridViewRow使用相同的样式演讲者没有任何装饰。

  <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,因为这意味着头文件被绑定到列表中的项目并且与它们和所有内容一起缩放。

有没有人有任何想法我可以这样做的风格工作?

+0

由于你的列是固定的,你可以使用'GridViewColumn.CellTemplate',对吧? –

回答

0

你可以把模板从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> 
+0

这解决了我的问题,但前两列只有在我删除了'DisplayMemberBinding =“{Binding Type}”'属性后。 – Stephanie