2016-07-22 1 views
0

DataGrid가 포함 된 ListView를 항목 템플릿으로 표시하는 데 문제가 있습니다. 문제는 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

?

내가있는 ListViewItem에 HorizontalContentAlignment 속성을 설정 한 씨께의 대답에 따라

업데이트되었습니다.

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

결과는 STIL 만족되지 않습니다 : Another screenshot

(나는 또한 DataGrid에 대한 AutoGenerateColumns="False"을 설정했다.)

이 같은 ListView 외부 넣어 같은 DataGrid와 비교해 :

<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이 내용을 늘리지 않는다는 것입니다. 내가 Here을 발견 한 것을 아마 당신이 해결 방법을 사용하여이 문제를 해결할 수 있습니다, 함께 따라

:

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

편집 : 당신은 ListBoxItem의의 속성 HorizontalContentAlignment 설정을 수정해야합니다 (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

답장을 보내 주셔서 감사합니다! HorizontalContentAlignment는 DataGrid에 영향을 미치지 만 열은 여전히 ​​잘못된 너비로 표시됩니다. 업데이트 된 질문보기 – koxy

+0

@koxy 나는 내 대답을 편집했다. 이제는 효과가있다. – CiccioRocca

+0

감사합니다. 또 다른 문제는 윈도우 크기를 조정할 때 가로 스크롤 막대가 나타나고 사라지는 결함입니다. HorizontalScrollBarVisibility를 사용하여 어떻게 든 비활성화 할 수있는 방법이 있어야한다고 생각합니다. – koxy