ListView DataTemplate 中的 ColumnDefinition 未扩展到全宽
ColumnDefinition in ListView DataTemplate does not expand to full width
我正在创建一个 ListView
,DataTemplate
是唯一的文本和一个按钮。我希望按钮位于最右侧,文本位于最左侧。但是我注意到我的 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>
您的列定义为 TextBlock
和 Button
在网格中的比例相等。如果要让Button
右对齐,TextBlock
取剩下的space,则设置第二列的Width
为Auto
。然后 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>
我正在创建一个 ListView
,DataTemplate
是唯一的文本和一个按钮。我希望按钮位于最右侧,文本位于最左侧。但是我注意到我的 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>
您的列定义为 TextBlock
和 Button
在网格中的比例相等。如果要让Button
右对齐,TextBlock
取剩下的space,则设置第二列的Width
为Auto
。然后 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>