Xaml UWP-我可以将数据模板中的文本块绑定到网格列';它外面有多宽?

Xaml UWP-我可以将数据模板中的文本块绑定到网格列';它外面有多宽?,xaml,uwp,Xaml,Uwp,对于UWP来说相对较新,是否可以将DataTemplate(用于列表视图中的ItemTemplate)的TextBlock绑定到其外部的列,或者是否有任何方法将DataTemplate的网格列宽度设置为“MainGrid”的列定义宽度的大小?下面的代码显示了我试图实现的目标 <Grid x:Name="MainGrid"> <Grid.ColumnDefinitions> <ColumnDefinition x:Name="Column1" Wi

对于UWP来说相对较新,是否可以将
DataTemplate
(用于列表视图中的
ItemTemplate
)的
TextBlock
绑定到其外部的列,或者是否有任何方法将DataTemplate的网格列宽度设置为“MainGrid”的列定义宽度的大小?下面的代码显示了我试图实现的目标

<Grid x:Name="MainGrid">
   <Grid.ColumnDefinitions>
       <ColumnDefinition x:Name="Column1" Width="*"/>
       <ColumnDefinition x:Name="Column2" Width="8*"/>
       <ColumnDefinition x:Name="Column3" Width="*"/>
   </Grid.ColumnDefinitions>
   <ListView Name="recordList" ItemsSource="{x:Bind _recordingList, TargetNullValue=0}">
       <ListView.ItemTemplate>
          <DataTemplate x:DataType="local:Recording">
            <Grid>
              <TextBlock Grid.Column="{Binding Column1}" Name="TextBlock_Time" Text="{x:Bind Time}"/>
              <TextBlock Grid.Column="{Binding Column2}"  Name="TextBlock_Message" Text="{x:Bind Message}"/>
              <TextBlock Grid.Column="{Binding Column3}"  Name="TextBlock_Type" Text="{x:Bind Type}"/>
            </Grid>
          </DataTemplate>
       </ListView.ItemTemplate>
   </ListView>
</Grid>

在下图中,我假设红线就是窗口。本质上是试图让列适应窗口大小的变化


只需将列移动到模板本身即可

DataTemplate是一个描述内容和位置的方案。因为它在ItemTemplate中,所以它意味着它适用于每个项目

 <ListView Name="recordList" ItemsSource="{x:Bind _recordingList, TargetNullValue=0}">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="local:Recording">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition x:Name="Column1" Width="*" />
                        <ColumnDefinition x:Name="Column2" Width="8*" />
                        <ColumnDefinition x:Name="Column3" Width="*" />
                    </Grid.ColumnDefinitions>
                    <TextBlock
                        Name="TextBlock_Time"
                        Grid.Column="0"
                        Margin="20"
                        Foreground="Red"
                        Text="{x:Bind Time}" />
                    <TextBlock
                        Name="TextBlock_Message"
                        Grid.Column="1"
                        Margin="20"
                        Foreground="Green"
                        Text="{x:Bind Message}" />
                    <TextBlock
                        Name="TextBlock_Type"
                        Grid.Column="2"
                        Margin="20"
                        Foreground="LightBlue"
                        Text="{x:Bind Type}" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

这会让你的物品看起来像这样

查看文档,因为它很好地解释了它。模板中有模板。因此,您可以模板化容器(它应该如何显示项目)和项目(每个项目应该是什么样子)


记住HorizontalAlignment=“Stretch”等,因为这意味着文本块(或网格)将占用其所有可用空间(水平)。修改一下它,你就会掌握它是如何工作的。

你只需要将列移动到模板本身

DataTemplate是一个描述内容和位置的方案。因为它在ItemTemplate中,所以它意味着它适用于每个项目

 <ListView Name="recordList" ItemsSource="{x:Bind _recordingList, TargetNullValue=0}">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="local:Recording">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition x:Name="Column1" Width="*" />
                        <ColumnDefinition x:Name="Column2" Width="8*" />
                        <ColumnDefinition x:Name="Column3" Width="*" />
                    </Grid.ColumnDefinitions>
                    <TextBlock
                        Name="TextBlock_Time"
                        Grid.Column="0"
                        Margin="20"
                        Foreground="Red"
                        Text="{x:Bind Time}" />
                    <TextBlock
                        Name="TextBlock_Message"
                        Grid.Column="1"
                        Margin="20"
                        Foreground="Green"
                        Text="{x:Bind Message}" />
                    <TextBlock
                        Name="TextBlock_Type"
                        Grid.Column="2"
                        Margin="20"
                        Foreground="LightBlue"
                        Text="{x:Bind Type}" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

这会让你的物品看起来像这样

查看文档,因为它很好地解释了它。模板中有模板。因此,您可以模板化容器(它应该如何显示项目)和项目(每个项目应该是什么样子)


记住HorizontalAlignment=“Stretch”等,因为这意味着文本块(或网格)将占用其所有可用空间(水平)。修改一下它,你就会了解它是如何工作的。

我想你希望
listviewitem
能够扩展到窗口大小。要实现这一点,您需要在
ItemContainerStyle
中将listviewitem的
HorizontalContentAlignment
设置为stretch


我想您希望将
listviewitem
拉伸到窗口大小。要实现这一点,您需要在
ItemContainerStyle
中将listviewitem的
HorizontalContentAlignment
设置为stretch



您到底想实现什么目标?对我来说,您似乎希望以某种方式表示数据。你能画一张图吗?我的目标是一张包含时间、消息和消息类型的表。我想让它们适应窗户的大小。我会为你制作一个图像。你到底想实现什么?对我来说,您似乎希望以某种方式表示数据。你能画一张图吗?我的目标是一张包含时间、消息和消息类型的表。我想让它们适应窗户的大小。我将为您制作一个图像。非常感谢,我忘记了设置项目容器样式,使用上面的答案解决了我的问题。非常感谢,我忘记了设置项目容器样式,使用上面的答案解决了我的问题。