带有标题和项模板列的Windows 8 XAML ListView应具有相同的动态宽度

use*_*243 5 xaml listview itemtemplate windows-8

我正在使用带有Itemtemplate和Headertemplate的Listview.两个模板都包含6个列.如果我为模板设置固定的列宽,一切都很好 - 如图1所示.
但我想为项目设置宽度为"自动" - 但后来我得到图2 ...

怎么办呢?是否可以使用c#设置标题列宽度? - 或任何其他解决方案?

图1:

http://i.stack.imgur.com/8Ew3g.png

图2:

http://i.stack.imgur.com/mPX4U.png

代码列表视图:

<ListView x:Name="DayanalyseListView" 
                      HorizontalAlignment="Center" 
                      VerticalAlignment="Top" 
                      ItemTemplate="{StaticResource DataTemplate}" 
                      HeaderTemplate="{StaticResource HeaderTemplate}">
            </ListView>
Run Code Online (Sandbox Code Playgroud)

HeaderTemplate中:

<DataTemplate  x:Key="HeaderTemplate" >
        <Grid Height="36" Background="DarkGray" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="95"/>
                <ColumnDefinition Width="85"/>
                <ColumnDefinition Width="85"/>
                <ColumnDefinition Width="85"/>
                <ColumnDefinition Width="85"/>
                <ColumnDefinition Width="*" MinWidth="900"/>
            </Grid.ColumnDefinitions>
            <TextBlock x:Uid="DayProject" TextWrapping="Wrap" Text="Project" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="7,2,0,0" Style="{StaticResource BodyTextStyle}" />
            <TextBlock x:Uid="DayTask" TextWrapping="Wrap" Text="Task" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="7,2,0,0" Style="{StaticResource BodyTextStyle}" />
            <TextBlock x:Uid="DayFrom" TextWrapping="Wrap" Text="From" Grid.Column="2" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="7,2,0,0" Style="{StaticResource BodyTextStyle}" />
            <TextBlock x:Uid="DayTill" TextWrapping="Wrap" Text="Till" Grid.Column="3" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="7,2,0,0" Style="{StaticResource BodyTextStyle}" />
            <TextBlock x:Uid="DaySum" TextWrapping="Wrap" Text="Sum"  Grid.Column="4" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="7,2,0,0" Style="{StaticResource BodyTextStyle}" />
            <TextBlock x:Uid="DayNote" TextWrapping="Wrap" Text="Note"  Grid.Column="5" VerticalAlignment="Top" HorizontalAlignment="Left"  Margin="7,2,0,0" Style="{StaticResource BodyTextStyle}" />
        </Grid>
    </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

ItemTemplate中:

<DataTemplate x:Key="DataTemplate">
        <Grid d:DesignHeight="50" Margin="0,5,0,0" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="95"/>
                <ColumnDefinition Width="85"/>
                <ColumnDefinition Width="85"/>
                <ColumnDefinition Width="85"/>
                <ColumnDefinition Width="85"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock HorizontalAlignment="Left" TextWrapping="NoWrap" Text="{Binding ProjectName}" VerticalAlignment="Center" Margin="5,0,0,0" Style="{StaticResource ItemTextStyle_sf}" Grid.Column="0" ToolTipService.ToolTip="{Binding ProjectName}"/>
            <TextBlock HorizontalAlignment="Left" TextWrapping="NoWrap" Text="{Binding TaskName}" VerticalAlignment="Center" Margin="5,0,0,0" Style="{StaticResource ItemTextStyle_sf}" Grid.Column="1" ToolTipService.ToolTip="{Binding TaskName}"/>
            <TextBlock HorizontalAlignment="Left" TextWrapping="NoWrap" Text="{Binding StartTimeString}" VerticalAlignment="Center" Margin="5,0,0,0" Style="{StaticResource ItemTextStyle_sf}"  Grid.Column="2"/>
            <TextBlock HorizontalAlignment="Left" TextWrapping="NoWrap" Text="{Binding StopTimeString}" VerticalAlignment="Center" Margin="5,0,0,0" Style="{StaticResource ItemTextStyle_sf}"  Grid.Column="3"/>
            <TextBlock HorizontalAlignment="Left" TextWrapping="NoWrap" Text="{Binding Sum}" VerticalAlignment="Center" Margin="5,0,0,0" Style="{StaticResource ItemTextStyle_sf}"  Grid.Column="4"/>
            <TextBlock HorizontalAlignment="Left" TextWrapping="NoWrap" Text="{Binding Note}" VerticalAlignment="Center" Margin="5,0,0,0" Style="{StaticResource ItemTextStyle_sf}"  ToolTipService.ToolTip="{Binding Note}" Grid.Column="5"/>
        </Grid>
     </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

Jar*_*SFT 5

ListView 不像 DataGrid 那样操作。ListView 只理解行,不理解列。您可以像使用 Grid 一样模拟列,但要了解的重要一点是项目和标题是两个完全独立的 UI 元素。

这意味着让项目中的列的大小改变标题中的列的大小并不容易。即使您要为它们命名,它们也是模板的一部分,因此名称没有任何用处(请记住,将创建多个项目)。

我建议您保持固定宽度,使用 * 宽度或使用实际的 DataGrid 控件。


Mag*_*iel 5

以下在我的案例中完美无缺:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid x:Name="ListViewHeaders" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition  />
            <ColumnDefinition  />
            <ColumnDefinition  />
            <ColumnDefinition  />
            <ColumnDefinition  />
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0" Text="Title Col 1" />
        <TextBlock Grid.Column="1" Text="Title Col 2" />
        <TextBlock Grid.Column="2" Text="Title Col 3" />
        <TextBlock Grid.Column="3" Text="Title Col 4" />
        <TextBlock Grid.Column="4" Text="Title Col 5" />
    </Grid>
    <ListView x:Name="myTable" Grid.Row="1" ItemsSource="{Binding SomeCollection}" >
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Width="{Binding ElementName=myTable, Path=ActualWidth}" >
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition  />
                        <ColumnDefinition  />
                        <ColumnDefinition  />
                        <ColumnDefinition  />
                        <ColumnDefinition  />
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Text="{Binding ItemProperty1}" />
                    <TextBlock Grid.Column="1" Text="{Binding ItemProperty2}" />
                    <TextBlock Grid.Column="2" Text="{Binding ItemProperty3}" />
                    <TextBlock Grid.Column="3" Text="{Binding ItemProperty4}" />
                    <TextBlock Grid.Column="4" Text="{Binding ItemProperty5}" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>
Run Code Online (Sandbox Code Playgroud)