[UWP][XAML] ListView 子项未使用全宽
[UWP][XAML] ListView child item not using full width
我正在尝试显示绑定项目列表。我已将数据模板自定义为网格,我希望右侧的列(具有固定宽度)贴在屏幕的右侧,而第一列我想填充剩余的 space。通常这工作正常,但当我将此网格放入 ListView 时,行为似乎发生了变化。下面是我的 ListView 代码:
<ListView x:Name="LView" Background="Green" Width="{Binding ElementName=ExtPropPage, Path=Width}" ItemsSource="{Binding CurrentSensor.ExtendedProperties, Mode=TwoWay}" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Center">
<ListView.ItemTemplate>
<DataTemplate >
<Grid Background="BlueViolet" Width="{Binding ElementName=LView, Path=Width}" HorizontalAlignment="Center" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" Background="Blue" HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" FontWeight="Bold" FontSize="12" Text="{Binding KeyId, Mode=TwoWay, Converter={StaticResource ExtPropConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="1" FontWeight="Normal" FontSize="10" Text="{Binding JsonValue, Mode=TwoWay}" TextWrapping="Wrap" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right" BorderBrush="{x:Null}" Background="Red">
<Button DataContext="{Binding}" ToolTipService.ToolTip="Edit" Click="ButtonHandler" BorderBrush="DarkGray" FontFamily="Segoe MDL2 Assets" Content="" Style="{StaticResource CircleButtonStyle}">
</Button>
<Button x:Name="DeviceCancelButton" ToolTipService.ToolTip="Delete" view:EventHandlers.Attach="Click" Click="DeleteExtProp" BorderBrush="DarkGray" FontFamily="Segoe MDL2 Assets" Content="" Style="{StaticResource CircleButtonStyle}">
</Button>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我在几个元素的背景上添加了颜色,以便更好地了解一个控件的边界与另一个控件的边界。到目前为止我能看到的是 ListView 扩展以填充整个屏幕宽度,这很好,但是当涉及到列表视图(网格)中的项目时,第 1 列中的项目长度不同(当超过填充了 1 个项目),并且网格对 space 的使用似乎取决于其中对象的宽度,而不是依赖于我使用 Width="*"
的事实,这应该告诉展开并填充可用的列 space,无论列本身中的内容如何。
我进行了大量搜索,并找到了一个又一个关于 HorizontalAlignment="Stretch"
使用的答案,要么我在错误的地方使用它,要么我遗漏了其他东西。
注意:上面的代码不一定是我尝试过的唯一解决方案,调整宽度和对齐方式的不同尝试会使这个 post 变得很大,所以希望有人能给出答案不是我尝试过的没有成功的东西。
感谢您的帮助。
P.S。作为对任何答案的额外奖励,我想覆盖“OnMouseOver”属性 以在我将鼠标悬停在 listviewitem 上时停止更改背景。当我将鼠标悬停在这些上面时,我不需要发生任何特别的事情。
一个朋友帮我找到了这个,这意味着这个问题现在是重复的,因为它是同一件事:
ListViewItem won't stretch to the width of a ListView
为了清楚起见,这里是解决我问题的外卖代码:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
我只是试图让我的 ListView 正确伸展并找到了这个答案。
我正在使用 Visual Studio 2017 并从事 UWA(通用 Windows 应用程序)项目。
我正在更改由项目模板添加的默认 Grid 元素,当 ListView 添加为网格行/列时我无法拉伸它。
我终于偶然发现了 XAML 您可以直接添加到 ListView 元素:
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
如您所见,效果很好:
我正在尝试显示绑定项目列表。我已将数据模板自定义为网格,我希望右侧的列(具有固定宽度)贴在屏幕的右侧,而第一列我想填充剩余的 space。通常这工作正常,但当我将此网格放入 ListView 时,行为似乎发生了变化。下面是我的 ListView 代码:
<ListView x:Name="LView" Background="Green" Width="{Binding ElementName=ExtPropPage, Path=Width}" ItemsSource="{Binding CurrentSensor.ExtendedProperties, Mode=TwoWay}" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Center">
<ListView.ItemTemplate>
<DataTemplate >
<Grid Background="BlueViolet" Width="{Binding ElementName=LView, Path=Width}" HorizontalAlignment="Center" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" Background="Blue" HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" FontWeight="Bold" FontSize="12" Text="{Binding KeyId, Mode=TwoWay, Converter={StaticResource ExtPropConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="1" FontWeight="Normal" FontSize="10" Text="{Binding JsonValue, Mode=TwoWay}" TextWrapping="Wrap" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right" BorderBrush="{x:Null}" Background="Red">
<Button DataContext="{Binding}" ToolTipService.ToolTip="Edit" Click="ButtonHandler" BorderBrush="DarkGray" FontFamily="Segoe MDL2 Assets" Content="" Style="{StaticResource CircleButtonStyle}">
</Button>
<Button x:Name="DeviceCancelButton" ToolTipService.ToolTip="Delete" view:EventHandlers.Attach="Click" Click="DeleteExtProp" BorderBrush="DarkGray" FontFamily="Segoe MDL2 Assets" Content="" Style="{StaticResource CircleButtonStyle}">
</Button>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我在几个元素的背景上添加了颜色,以便更好地了解一个控件的边界与另一个控件的边界。到目前为止我能看到的是 ListView 扩展以填充整个屏幕宽度,这很好,但是当涉及到列表视图(网格)中的项目时,第 1 列中的项目长度不同(当超过填充了 1 个项目),并且网格对 space 的使用似乎取决于其中对象的宽度,而不是依赖于我使用 Width="*"
的事实,这应该告诉展开并填充可用的列 space,无论列本身中的内容如何。
我进行了大量搜索,并找到了一个又一个关于 HorizontalAlignment="Stretch"
使用的答案,要么我在错误的地方使用它,要么我遗漏了其他东西。
注意:上面的代码不一定是我尝试过的唯一解决方案,调整宽度和对齐方式的不同尝试会使这个 post 变得很大,所以希望有人能给出答案不是我尝试过的没有成功的东西。
感谢您的帮助。
P.S。作为对任何答案的额外奖励,我想覆盖“OnMouseOver”属性 以在我将鼠标悬停在 listviewitem 上时停止更改背景。当我将鼠标悬停在这些上面时,我不需要发生任何特别的事情。
一个朋友帮我找到了这个,这意味着这个问题现在是重复的,因为它是同一件事:
ListViewItem won't stretch to the width of a ListView
为了清楚起见,这里是解决我问题的外卖代码:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
我只是试图让我的 ListView 正确伸展并找到了这个答案。 我正在使用 Visual Studio 2017 并从事 UWA(通用 Windows 应用程序)项目。
我正在更改由项目模板添加的默认 Grid 元素,当 ListView 添加为网格行/列时我无法拉伸它。
我终于偶然发现了 XAML 您可以直接添加到 ListView 元素:
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
如您所见,效果很好: