你好可以有一个ListView - > ListView.View - > GridView - > GridViewColumn每行“两行”。
例如。
第1栏|栏目2
行1 blah |数据呀
行2等|更
我尝试使用Cell模板失败,但是当手动调整其包含列的大小时,模板内的项目不会调整大小。
代码:
<ListView Height="238" DockPanel.Dock="Top" ItemsSource="{Binding Blah}"
SelectedItem="{Binding Path=Selectedblah, UpdateSourceTrigger=PropertyChanged}">
<ListView.View>
<GridView>
<GridViewColumn Header="No." DisplayMemberBinding="{Binding Path=Id}" Width="25" />
<GridViewColumn Header="Job Type" DisplayMemberBinding="{Binding Path=Something}" Width="165" />
<GridViewColumn Header="Assigned To" DisplayMemberBinding="{Binding Path=SomethingElse}" Width="90" />
<GridViewColumn Header="Created" DisplayMemberBinding="{Binding Path=DateCreated, Converter={StaticResource dateTimeFormat}, ConverterParameter='dd/MM/yy HH:mm'}" Width="65" />
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="/Streetcar.UI.Modules.FleetTracker;component/Resources/Images/tick.png" Visibility="{Binding IsCompleted, Converter={StaticResource boolToVis}}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
有什么想法吗?
编辑:这是使用MVVM所以只有一个有界的ViewModel背后没有代码
答案 0 :(得分:4)
好的,我会再试一次。您是否尝试CellTemplate
TextBlock
且TextWrapping
设置为Wrap
?
例如:
<ListView x:Name="MyListView">
<ListView.View>
<GridView>
<GridViewColumn Header="Hello"
Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce non nibh quis odio aliquet venenatis."
TextWrapping="Wrap"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="World"/>
</GridView>
</ListView.View>
<ListViewItem/>
<ListViewItem/>
<ListViewItem/>
<ListViewItem/>
</ListView>
答案 1 :(得分:3)
首先,CellTemplate是在单元格中拥有自定义内容的方法。例如,你可以在CellTemplate中有一个垂直的StackPanel。
接下来,要在更改列宽时自动调整单元格的内容,需要在ListViewItem上指定HorizontalContentAlignment =“Stretch”:
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
答案 2 :(得分:1)
忍受我,因为我不是百分之百确定这是你所要求的。但是,假设您希望每行下面都有更多文本(outlook autopreview feature),我想我可以提供帮助。
您需要覆盖ListViewItem
的默认样式,并更改ControlTemplate
以在TextBlock
下添加GridViewRowPresenter
。当你完成后,它看起来像这样:
<Style TargetType="ListViewItem">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border Name="Border"
Padding="2"
SnapsToDevicePixels="true"
Background="Transparent">
<StackPanel>
<GridViewRowPresenter Columns="{TemplateBinding GridView.ColumnCollection}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
<TextBlock Text="This is where your text goes!"/>
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="Border"
Property="Background" Value="{StaticResource SelectedBackgroundBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground"
Value="{StaticResource DisabledForegroundBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您可能必须对Width
TextBlock
的约ListView
进行约束,以便将其包裹在{{1}}内,但这应该可以让您开始。
答案 3 :(得分:1)
这就是我所做的。
<GridView ColumnHeaderToolTip="Addendum Master" >
<GridViewColumn Width="500">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" Margin="0">
<Label Content="{Binding Path=Line1}" Padding="0" Margin="0" Style="{StaticResource GridLabelStyle}"></Label>
<Label Content="{Binding Path=Line2}" Padding="0" Margin="0" Style="{StaticResource GridLabelStyle}"></Label>
<Label Content="{Binding Path=Line3}" Padding="0" Margin="0" Style="{StaticResource GridLabelStyle}"></Label>
<Label Content="{Binding Path=Line4}" Padding="0" Margin="0" Style="{StaticResource GridLabelStyle}"></Label>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
答案 4 :(得分:0)
我觉得这是一个问题的简单解决方案,当涉及到每个记录2行时,许多人已经遇到这个问题,同时仍然能够使用gridview控件附带的分页和排序等。我会给你代码并试着尽我所能解释它。
<Columns>
<asp:BoundField DataField="CPTCode" HeaderText="CPTCode" ItemStyle-CssClass="center" SortExpression="CPTCode" >
<ItemStyle CssClass="center" />
</asp:BoundField>
<asp:BoundField DataField="InsPlanCode" HeaderText="InsPlanCode" ItemStyle-CssClass="center" SortExpression="InsPlanCode" >
<ItemStyle CssClass="center" />
</asp:BoundField>
<asp:BoundField DataField="StartDate" HeaderText="Start Date" ItemStyle-CssClass="center" SortExpression="StartDate" >
<ItemStyle CssClass="center" />
</asp:BoundField>
<asp:BoundField DataField="EndDate" HeaderText="End Date" ItemStyle-CssClass="center" SortExpression="EndDate" >
<ItemStyle CssClass="center" />
</asp:BoundField>
<asp:BoundField DataField="UserName" HeaderText="UserName" ItemStyle-CssClass="center" >
<ItemStyle CssClass="center" />
</asp:BoundField>
<asp:TemplateField HeaderText=" " ItemStyle-CssClass="center" HeaderStyle-BackColor="AliceBlue" ItemStyle-BackColor="AliceBlue">
<ItemTemplate>
</td>
</tr>
<tr>
<td align="center" nowrap> <b>Message</b> </td>
<td colspan="10"><TABLE cellpadding=5><tr><td><%# Eval("carveOutMessage")%></td></tr></TABLE>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
诀窍在于自定义TemplateField ItemTemplate。
首先要知道的是,在创建TemplateField时在html源代码中呈现的内容是一个新的打开和关闭TD标记。在创建最后一列之后,它会关闭带有结束标记的行。 因此,创建模板字段打开和关闭以及打开和关闭ItemTemplate标记。在你的内心,你要做的第一件事就是关闭open td标签&#34;&#34;然后打开tr标签&#34;&#34;。然后创建一个新行和一个新列标记。现在,如果列需要为某种描述或注释列宽。使用columnspan = 10或者你需要多少。因为Templatefield将关闭TD标记,所以最后一个td标记不应该有一个结束标记,而你的最后一行不应该有一个结束TR标记,因为它将在结束标记的位置被关闭。
我希望这对人们有所帮助并且足够清楚。您可以使用此方法根据需要为每条记录创建任意数量的行。如果你对html和表格有任何好处,也可以做任何其他格式化的事情。关键是要记住,当你开始时,你在一个打开的td和tr标签内进行格式化,最后它将写入一个结束的td和tr标签,所以保持你的最后一列和行打开。