2016-07-22 45 views
0

我在顯示ListView和DataGrids(作爲項目模板)時遇到了一些麻煩。問題是DataGrid中的列寬變得不正確,不能伸展以填充整個控件寬度。ListView中的DataGrid作爲項目模板

代碼:

<Window x:Class="WpfTest1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfTest1" 
     xmlns:system="clr-namespace:System;assembly=mscorlib" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 

    <Window.Resources> 

     <x:Array x:Key="ListViewItems" 
       Type="{x:Type system:String}"> 
      <system:String>1</system:String> 
      <system:String>2</system:String> 
     </x:Array> 

     <x:Array x:Key="DataGridItems" 
       Type="{x:Type system:String}"> 
      <system:String>1</system:String> 
      <system:String>2</system:String> 
      <system:String>3</system:String> 
     </x:Array> 

     <DataTemplate x:Key="TemplateWidthDataGrid"> 
      <DataGrid ItemsSource="{StaticResource DataGridItems}"> 
       <DataGrid.Columns> 
        <DataGridTextColumn Header="Column1" 
             Width="*" /> 
        <DataGridTextColumn Header="Column2" 
             Width="*" /> 
       </DataGrid.Columns> 
      </DataGrid> 
     </DataTemplate> 

    </Window.Resources> 

    <Grid> 
     <ListView ItemTemplate="{StaticResource TemplateWidthDataGrid}" 
        ItemsSource="{StaticResource ListViewItems}" /> 
    </Grid> 
</Window> 

結果是這樣的: MainWindow screenshot

我怎樣才能列,以填補在這種情況下,控制寬度是多少?

修訂

繼Ciccio的答案我已經設置了HorizontalContentAlignment酒店在ListViewItem的。

<ListView ItemTemplate="{StaticResource TemplateWithDataGrid}" 
       ItemsSource="{StaticResource ListViewItems}"> 
     <ListView.ItemContainerStyle> 
      <Style TargetType="ListViewItem"> 
       <Setter Property="HorizontalContentAlignment" 
         Value="Stretch" /> 
      </Style> 
     </ListView.ItemContainerStyle> 
    </ListView> 

結果還是老樣子並不令人滿意: Another screenshot

(我也不得不設置AutoGenerateColumns="False"DataGrid

與同DataGridListView這樣的外比較:

<Grid> 
    <DataGrid ItemsSource="{StaticResource DataGridItems}" 
       AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Column1" 
           Width="*" /> 
      <DataGridTextColumn Header="Column2" 
           Width="*" /> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

Third screenshot

回答

1

問題是ItemPanel沒有伸展它的內容。你應該修復它設置屬性HorizontalContentAlignmentListBoxItem的

<Grid> 
    <ListView ItemTemplate="{StaticResource TemplateWidthDataGrid}" 
       ItemsSource="{StaticResource ListViewItems}" > 
     <ListView.ItemContainerStyle> 
      <Style TargetType="ListViewItem"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
      </Style> 
     </ListView.ItemContainerStyle> 
    </ListView> 
</Grid> 

編輯:

與根據我所發現的Here,可能你會使用一種變通方法解決這個問題:(綁定數據網格的寬度ListViewItemPresenterActualWidth並調整邊距)

<x:Array x:Key="ListViewItems" Type="{x:Type system:String}"> 
     <system:String>1</system:String> 
     <system:String>2</system:String> 
    </x:Array> 

    <x:Array x:Key="DataGridItems" Type="{x:Type system:String}"> 
     <system:String>1</system:String> 
     <system:String>2</system:String> 
     <system:String>3</system:String> 
    </x:Array> 

    <DataTemplate x:Key="TemplateWidthDataGrid"> 
     <DataGrid AutoGenerateColumns="False" ItemsSource="{StaticResource DataGridItems}" Margin="-5,0,0,0" 
        Width="{Binding ActualWidth, Mode=OneWay, 
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsPresenter}}}" 
        HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch" > 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Column1" Width="*" /> 
       <DataGridTextColumn Header="Column2" Width="*" /> 
      </DataGrid.Columns> 
     </DataGrid> 
    </DataTemplate> 

</Window.Resources> 

<Grid> 
    <ListView ItemTemplate="{StaticResource TemplateWidthDataGrid}" ItemsSource="{StaticResource ListViewItems}"> 

     <ListView.ItemContainerStyle> 
      <Style TargetType="ListViewItem"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
      </Style> 
     </ListView.ItemContainerStyle> 
    </ListView> 
</Grid> 
+0

感謝您的回覆! Horizo​​ntalContentAlignment在DataGrid上產生一些效果,但列的寬度仍然不正確。查看更新的問題。 – koxy

+0

@koxy我編輯了我的答案,現在它應該可以工作。 – CiccioRocca

+0

它的工作,謝謝!另一個問題是,當我調整窗口大小時,水平滾動條出現並消失的故障。我認爲一定有辦法用Horizo​​ntalScrollBarVisibility以某種方式禁用它 – koxy

相關問題