2017-08-01 7 views
2

完全に機能するヘッダーを持つリストを作成しようとしていますが、機能的なヘッダーとすべてのリストビューアイテムをテキストブロックに縮小したリストしか得られないようです。または、ヘッダーが正しくリンクされていない状態で、すべてのボタンとテキストが完全にスタイルされたリストビュー。下記の画像を参照してください。WPF GridViewRowPresenterはすべてのコンテンツをTextblockに変換します

enter image description here

マイリストビューの定義は、それらの両方のために次のようになります。

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

とスタイリングの唯一の違いは、作業ヘッダと1は次のようにの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> 

第2のものは、同じスタイリングをGridViewRowの代わりに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> 

は私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} "属性を削除した後の最初の2つの列についてのみ解決しました。 – Stephanie

関連する問題