我是UWP的新手,并且在一天中大部分时间都在努力应该使用简单的XAML,但是我无法按照我想要的方式进行布局。我想要实现的目标如下所示。
在第1列中水平和垂直居中的单个文本。 在第2列中左对齐的2个文本。 在第3列中水平和垂直居中的单个文本。
这是我到目前为止的XAML。我知道我需要使用列,但即使尝试这样做,我也无法正确使用布局。
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TramTimes"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Class="TramTimes.ServicesPage"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListView x:Name="list" IsItemClickEnabled="False" SelectionMode="None">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<StackPanel>
<TextBlock Text="{Binding Destination}"/>
<TextBlock Text="{Binding Company}"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Page>
感谢任何有助于让列表看起来像我需要的帮助。
修改
这是我现在使用的代码以及我得到的结果 - 任何人都可以帮助我让网格填满整个列表的宽度吗?
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TramTimes"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Maps="using:Windows.UI.Xaml.Controls.Maps"
x:Class="TramTimes.ServicesPage"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Maps:MapControl x:Name="map" Height="300" VerticalAlignment="Top"/>
<ListView x:Name="list" IsItemClickEnabled="False" Margin="0,300,0,0" SelectionMode="None">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="3.5*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Scheduled}"/>
<StackPanel Grid.Column="2">
<TextBlock Text="{Binding Destination}"/>
<TextBlock Text="{Binding Company}"/>
</StackPanel>
<TextBlock Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Route}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Page>
答案 0 :(得分:5)
我修复了这个问题 - 忘记了列引用是基于0而没有帮助,并且还添加了以下内容,使网格填充了列表的整个宽度。
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
答案 1 :(得分:0)
您可以在模板中以比例宽度添加列:
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="3.5*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Destination}" Grid.Column="0"/>
<TextBlock Text="{Binding Company}" Grid.Column="1"/>
<TextBlock Text="3rd column" Grid.Column="2"/>
</Grid>
</DataTemplate>
详细了解UWP中的布局面板,特别是Grid
here。