[UWP] [XAML] ListView子项不使用全宽

Tek*_*ant 3 listview uwp-xaml

我正在尝试显示绑定项的列表.我已经将datatemplate定制为网格,我希望右侧列(具有固定宽度)粘贴到屏幕的右侧,而第一列我想要填充剩余空间.通常情况下这很好,但是当我将这个网格放在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="&#xE70F;" Style="{StaticResource CircleButtonStyle}">

                            </Button>
                            <Button x:Name="DeviceCancelButton" ToolTipService.ToolTip="Delete" view:EventHandlers.Attach="Click" Click="DeleteExtProp" BorderBrush="DarkGray" FontFamily="Segoe MDL2 Assets" Content="&#xE74D;" Style="{StaticResource CircleButtonStyle}">

                            </Button>
                        </StackPanel>


                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>

        </ListView>
Run Code Online (Sandbox Code Playgroud)

我在几个元素的背景上添加了颜色,以便更好地了解一个控件的边界与另一个控件的界限.到目前为止我能看到的是ListView扩展以填充整个屏幕宽度,这很好,但是当涉及列表视图(网格)中的项目时,第1列中的项目长度不同(当超过填充了1个项目,似乎网格对空间的使用取决于其中对象的宽度,而不是依赖于我使用的事实,Width="*"它应该告诉列扩展并填充可用空间,无论如何列本身的内容.

我做了大量的搜索,并在回答有关使用之后找到答案HorizontalAlignment="Stretch",或者我在错误的地方使用它或者我在一起错过了其他的东西.

注意:上面的代码并不一定表明我是唯一尝试过的解决方案,调整宽度和对齐的不同尝试会使这个帖子变得庞大,所以希望有人得到的答案不是我尝试过的结果没有成功.

谢谢您的帮助.

PS作为任何答案的额外奖励,当我将鼠标悬停在listviewitem上时,我想覆盖"OnMouseOver"属性以停止更改背景.当我徘徊在这些上面时,我不需要任何特别的事情.

Tek*_*ant 19

一位朋友帮我找到了这个,这意味着这个问题现在是重复的,因为它是一样的:

ListViewItem不会拉伸到ListView的宽度

但为了清楚起见,这里是解决我的问题的外卖代码:

<ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
</ListView.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)