2017-08-01 1 views
2

Ich versuche, eine Liste mit voll funktionsfähigen Headern zu erstellen, aber ich kann nur scheinen, entweder eine Liste mit funktionalen Kopfzeilen und alle Listenansicht Elemente auf Textblöcke reduziert zu bekommen. ODER eine Listenansicht, in der alle Schaltflächen und Texte vollständig formatiert sind, ohne dass die Header ordnungsgemäß verknüpft sind. Siehe das Bild unten;WPF GridViewRowPresenter macht den ganzen Inhalt in Textblöcke

enter image description here

Meine Listview-Definition sieht wie folgt für beide:

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

Und der einzige Unterschied in der Styling ist, dass die mit den Arbeits Header verwendet eine GridViewRowPresenter im ListViewItem wie diese :

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

Und der zweite verwendet mit einem Content die gleiche Optik nur anstelle der GridViewRow Moderator ohne Verzierungen.

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

Aus irgendeinem Grund die GridViewRowPresenter Verwendung bedeutet jedes Element in meinem ListView.ItemTemplate der Datatemplate gets turned into a Textblock. Und ich kann nicht herausfinden warum. Ich würde es wirklich vorziehen, weiterhin den GridViewRowPresenter zu verwenden, da dies bedeutet, dass die Header an die Elemente in der Liste gebunden sind und mit ihnen und allem skalieren.

Hat jemand eine Idee, wie ich das zum Arbeiten stylen kann?

+0

Da Ihre Spalten fest sind, könnten Sie 'GridViewColumn.CellTemplate' verwenden, richtig? –

Antwort

0

Können Sie Ihre Vorlagen aus dem ItemTemplate in die GridViewColumns einfügen?

<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

Dies löste es für mich, aber für die ersten beiden Spalten erst nachdem ich die 'DisplayMemberBinding =" {Binding Type} "' Attribute entfernt hatte. – Stephanie

Verwandte Themen