UWP 网格中的内部项目未拉伸 XAML
Inner Items in UWP Grid not stretching XAML
此列表视图中的项目没有跨越屏幕宽度时出现问题。抱歉,如果我的代码草率。这有点新鲜。我确实有类似代码的类似页面。
提前致谢!
不是完整代码 - 不确定您是否需要它。
<ListView x:Name="listView" DataContext="{Binding ServicesCvs}" ItemsSource="{Binding}" Margin="0,80,0,0" HorizontalContentAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Button Command="{Binding DataContext.SelectServiceCommand, ElementName=serviceSelectionPage}"
CommandParameter="{Binding Text, ElementName=ServiceIdTextBlock}">
<StackPanel Orientation="Horizontal" Margin="0,0,0,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="ServiceIdTextBlock" Grid.Column="1" FontFamily="Arial" Text="{Binding ServiceId}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" Foreground="#FF18417C" Margin="10,0,0,0"/>
<TextBlock x:Name="ServiceType" Grid.Column="2" FontFamily="Arial" Text="{Binding ServiceTypeId}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" Foreground="#FF414B59"/>
<TextBlock x:Name="AssetId_TextBlock" Grid.Column="3" FontFamily="Arial" Text="{Binding AssetId}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" Foreground="#FF4D7CC1"/>
<TextBlock x:Name="ProductItemId_TextBlock" Grid.Column="4" FontFamily="Arial" Text="{Binding ProductItemId}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" Foreground="#FF414B59"/>
</Grid>
</StackPanel>
</Button>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
两个问题:
- 设置按钮的
HorizontalContentAlignment="Stretch"
。您的子控件可以指定拉伸,但它们只会拉伸到父控件提供给它们的 space 范围内。
- 删除水平 StackPanel。 StackPanel 覆盖拉伸并有效地表示 "reserve as much space as the child controls require for layout and no more".
我不确定这是否与您遇到的问题相同,但让我为 listview/gridview 疯狂的一件事是 容器不会伸展。模板会拉伸,但仅限于容器,默认情况下不会拉伸。
解决方法是通过向您的资源添加类似这样的内容(在页面上或 app.xaml 资源字典中:
来覆盖 ListViewItem/GridViewItem 的样式
<Style TargetType="ListViewItem">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
您不会在设计器中看到结果 (!!!) 但是当您 运行 它时,它应该会拉伸项目的内容以填满屏幕
希望对您有所帮助!
把它放在你的 ListView 中,它也可以在设计器中工作
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
正如 Mark Feldman 所说,删除 StackPanel 并设置按钮的 HorizontalContentAlignment="Stretch"。
此列表视图中的项目没有跨越屏幕宽度时出现问题。抱歉,如果我的代码草率。这有点新鲜。我确实有类似代码的类似页面。
提前致谢!
不是完整代码 - 不确定您是否需要它。
<ListView x:Name="listView" DataContext="{Binding ServicesCvs}" ItemsSource="{Binding}" Margin="0,80,0,0" HorizontalContentAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Button Command="{Binding DataContext.SelectServiceCommand, ElementName=serviceSelectionPage}"
CommandParameter="{Binding Text, ElementName=ServiceIdTextBlock}">
<StackPanel Orientation="Horizontal" Margin="0,0,0,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="ServiceIdTextBlock" Grid.Column="1" FontFamily="Arial" Text="{Binding ServiceId}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" Foreground="#FF18417C" Margin="10,0,0,0"/>
<TextBlock x:Name="ServiceType" Grid.Column="2" FontFamily="Arial" Text="{Binding ServiceTypeId}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" Foreground="#FF414B59"/>
<TextBlock x:Name="AssetId_TextBlock" Grid.Column="3" FontFamily="Arial" Text="{Binding AssetId}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" Foreground="#FF4D7CC1"/>
<TextBlock x:Name="ProductItemId_TextBlock" Grid.Column="4" FontFamily="Arial" Text="{Binding ProductItemId}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" Foreground="#FF414B59"/>
</Grid>
</StackPanel>
</Button>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
两个问题:
- 设置按钮的
HorizontalContentAlignment="Stretch"
。您的子控件可以指定拉伸,但它们只会拉伸到父控件提供给它们的 space 范围内。 - 删除水平 StackPanel。 StackPanel 覆盖拉伸并有效地表示 "reserve as much space as the child controls require for layout and no more".
我不确定这是否与您遇到的问题相同,但让我为 listview/gridview 疯狂的一件事是 容器不会伸展。模板会拉伸,但仅限于容器,默认情况下不会拉伸。
解决方法是通过向您的资源添加类似这样的内容(在页面上或 app.xaml 资源字典中:
来覆盖 ListViewItem/GridViewItem 的样式<Style TargetType="ListViewItem">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
您不会在设计器中看到结果 (!!!) 但是当您 运行 它时,它应该会拉伸项目的内容以填满屏幕
希望对您有所帮助!
把它放在你的 ListView 中,它也可以在设计器中工作
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
正如 Mark Feldman 所说,删除 StackPanel 并设置按钮的 HorizontalContentAlignment="Stretch"。