Windows 8的XAML的ListView有抬头和项目模板列应具有相同的动态宽度 [英] Windows 8 XAML ListView with Header and Item Template columns should have same dynamic width

查看:198
本文介绍了Windows 8的XAML的ListView有抬头和项目模板列应具有相同的动态宽度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用同一个ItemTemplate和HeaderTemplate中一个ListView。
这两个模板包含6列。一切都OK了,如果我的模板设置固定列宽 - 就像在图一是结果
但我想的宽度设置为自动的项目 - 但后来我得到图2 ...

如何处理呢?
是否有可能设置在C#中标题列的宽度? - ?或任何其他解决方案

图1:

图2:

code列表视图:

 < ListView的X:名称=DayanalyseListView
                      的Horizo​​ntalAlignment =中心
                      VerticalAlignment =顶部
                      的ItemTemplate ={StaticResource的DataTemplate中}
                      HeaderTemplate中={StaticResource的HeaderTemplate中}>
            < /&的ListView GT;

HeaderTemplate中:

 <的DataTemplate X:键=HeaderTemplate中>
        <电网高度=36背景=深灰>
            < 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 =DayProjectTextWrapping =自动换行文本=项目Grid.Column =0VerticalAlignment =顶部的Horizo​​ntalAlignment =左保证金=7,2,0,0风格= {StaticResource的BodyTextStyle}/>
            < TextBlock的X:UID =DayTaskTextWrapping =自动换行文本=任务Grid.Column =1VerticalAlignment =顶部的Horizo​​ntalAlignment =左保证金=7,2,0,0风格= {StaticResource的BodyTextStyle}/>
            < TextBlock的X:UID =DayFromTextWrapping =自动换行文本=从Grid.Column =2VerticalAlignment =顶部的Horizo​​ntalAlignment =左保证金=7,2,0,0风格= {StaticResource的BodyTextStyle}/>
            < TextBlock的X:UID =DayTillTextWrapping =自动换行文本=直到Grid.Column =3VerticalAlignment =顶部的Horizo​​ntalAlignment =左保证金=7,2,0,0风格= {StaticResource的BodyTextStyle}/>
            < TextBlock的X:UID =DaySumTextWrapping =自动换行文本=总和Grid.Column =4VerticalAlignment =顶部的Horizo​​ntalAlignment =左保证金=7,2,0,0风格= {StaticResource的BodyTextStyle}/>
            < TextBlock的X:UID =DayNoteTextWrapping =自动换行文本=注Grid.Column =5VerticalAlignment =顶部的Horizo​​ntalAlignment =左保证金=7,2,0,0风格= {StaticResource的BodyTextStyle}/>
        < /网格和GT;
    < / DataTemplate中>

ItemTemplate中:

 <的DataTemplate X:键=的DataTemplate>
        <电网D:DesignHeight =50保证金=0,5,0,0>
            < Grid.ColumnDefinitions>
                < ColumnDefinition WIDTH =95/>
                < ColumnDefinition WIDTH =85/>
                < ColumnDefinition WIDTH =85/>
                < ColumnDefinition WIDTH =85/>
                < ColumnDefinition WIDTH =85/>
                &所述; ColumnDefinition宽度=*/>
            < /Grid.ColumnDefinitions>
            < TextBlock中的Horizo​​ntalAlignment =左TextWrapping =NoWrap的文本={结合项目名}VerticalAlignment =中心保证金=5,0,0,0风格={StaticResource的ItemTextStyle_sf}Grid.Column = 0ToolTipService.ToolTip ={结合项目名}/>
            < TextBlock中的Horizo​​ntalAlignment =左TextWrapping =NoWrap的文本={结合TASKNAME}VerticalAlignment =中心保证金=5,0,0,0风格={StaticResource的ItemTextStyle_sf}Grid.Column = 1ToolTipService.ToolTip ={结合TASKNAME}/>
            < TextBlock中的Horizo​​ntalAlignment =左TextWrapping =NoWrap的文本={结合StartTimeString}VerticalAlignment =中心保证金=5,0,0,0风格={StaticResource的ItemTextStyle_sf}Grid.Column = 2/>
            < TextBlock中的Horizo​​ntalAlignment =左TextWrapping =NoWrap的文本={结合StopTimeString}VerticalAlignment =中心保证金=5,0,0,0风格={StaticResource的ItemTextStyle_sf}Grid.Column = 3/>
            < TextBlock中的Horizo​​ntalAlignment =左TextWrapping =NoWrap的文本={结合总和}VerticalAlignment =中心保证金=5,0,0,0风格={StaticResource的ItemTextStyle_sf}Grid.Column = 4/>
            < TextBlock中的Horizo​​ntalAlignment =左TextWrapping =NoWrap的文本={结合注}VerticalAlignment =中心保证金=5,0,0,0风格={StaticResource的ItemTextStyle_sf}ToolTipService.ToolTip = {装订注意}Grid.Column =10/>
        < /网格和GT;
     < / DataTemplate中>


解决方案

ListView控件不工作就像一个DataGrid。 ListView控件只能理解行和不理解列。您可以模拟列像你使用一个网格,而是要明白最重要的是,该项目和头部是两个完全独立的用户界面元素。

含义没有容易有在该项目的列的大小改变列的大小的报头。即使你他们的名字,他们是一个模板,这样的名字将不会有任何使用(请记住,将有创建多个项目)的一部分。

我建议你留具有固定宽度,使用*宽度或使用一个实际的DataGrid控件。

I am using a Listview with an Itemtemplate and a Headertemplate. Both templates contain 6 Columns. Everything is ok if i set a fixed column width for the templates - like in figure one.
But i want to set the width to "Auto" for the items - but then i get figure 2...

How to handle this? Is it possible to set the Header Column width with c#? - or any other solution?

Figure 1:

Figure 2:

Code Listview:

<ListView x:Name="DayanalyseListView" 
                      HorizontalAlignment="Center" 
                      VerticalAlignment="Top" 
                      ItemTemplate="{StaticResource DataTemplate}" 
                      HeaderTemplate="{StaticResource HeaderTemplate}">
            </ListView>

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>

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>

解决方案

ListView does not operate like a DataGrid. ListView only understands rows and doesn't understand columns. You can simulate columns like you are by using a Grid, but the important thing to understand is that the item and the header are two completely separate UI elements.

Meaning there is no easy to have the size of the columns in the item change the size of the columns in the header. Even if you were to name them, they are part of a template so the names won't be of any use (remember, there will be multiple items created).

I recommend you stay with fixed widths, use * widths or use an actual DataGrid control.

这篇关于Windows 8的XAML的ListView有抬头和项目模板列应具有相同的动态宽度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆