ListView DataTemplate 中的 ColumnDefinition 未扩展到全宽

ColumnDefinition in ListView DataTemplate does not expand to full width

我正在创建一个 ListViewDataTemplate 是唯一的文本和一个按钮。我希望按钮位于最右侧,文本位于最左侧。但是我注意到我的 Grid.ColumnDefinitions 似乎没有占用 ListViewItem 的所有 space(或者我是这么认为的)。我希望它们展开到全宽。

<ListView Padding="5" x:Name="RecipeList" FontSize="15">
   <ListView.ItemTemplate>
      <DataTemplate>
         <Grid>
            <Grid.ColumnDefinitions>
               <ColumnDefinition></ColumnDefinition>
               <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
                                
            <TextBlock Text="{Binding Name}" Grid.Column="0"/>
            <Button Grid.Column="1">Delete</Button>
         </Grid>
      </DataTemplate>
   </ListView.ItemTemplate>
</ListView>

ListViewItem(由您的数据模板定义的内容容器)的默认内容对齐方式是 Left,因此 Grid 将只占用 space 根据需要,但不会缩放到可用宽度。改为 Stretch 是一个项目容器样式。

<ListView Padding="5" x:Name="RecipeList" FontSize="15">
   <ListView.ItemContainerStyle>
      <Style TargetType="{x:Type ListViewItem}">
         <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
      </Style>
   </ListView.ItemContainerStyle>
   <ListView.ItemTemplate>
      <DataTemplate>
         <Grid>
            <Grid.ColumnDefinitions>
               <ColumnDefinition></ColumnDefinition>
               <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
                                
            <TextBlock Text="{Binding Name}" Grid.Column="0"/>
            <Button Grid.Column="1">Delete</Button>
         </Grid>
      </DataTemplate>
   </ListView.ItemTemplate>
</ListView>

您的列定义为 TextBlockButton 在网格中的比例相等。如果要让Button右对齐,TextBlock取剩下的space,则设置第二列的WidthAuto。然后 Button 只使用它需要的 space。

<Grid>
   <Grid.ColumnDefinitions>
      <ColumnDefinition></ColumnDefinition>
      <ColumnDefinition Width="Auto"/>
   </Grid.ColumnDefinitions>

   <TextBlock Text="{Binding Name}" Grid.Column="0"/>
   <Button Grid.Column="1">Delete</Button>
</Grid>