【问题标题】:[UWP][XAML] ListView child item not using full width[UWP][XAML] ListView 子项未使用全宽
【发布时间】:2016-11-03 06:32:29
【问题描述】:

我正在尝试显示绑定项目的列表。我已经将数据模板自定义为网格,并且我希望右列(具有固定宽度)贴在屏幕的右侧,并且我想填充剩余空间的第一列。通常这可以正常工作,但是当我将此网格放入 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>

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

我已经做了很多搜索,并在与HorizontalAlignment="Stretch" 的使用有关的答案之后找到了答案,要么我在错误的地方使用它,要么我错过了其他东西。

注意:上面的代码不一定表示我尝试过的唯一解决方案,调整宽度和对齐方式的不同尝试会使这篇文章变得巨大,所以希望有人能给出我没有尝试过的答案结果没有成功。

感谢您的帮助。

附:作为任何答案的额外奖励,当我将鼠标悬停在 listviewitem 上时,我想覆盖“OnMouseOver”属性以停止更改背景。当我将鼠标悬停在这些上方时,我不需要发生任何特别的事情。

【问题讨论】:

    标签: listview uwp-xaml


    【解决方案1】:

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

    ListViewItem won't stretch to the width of a ListView

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

        <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                </Style>
        </ListView.ItemContainerStyle>
    

    【讨论】:

      【解决方案2】:

      我只是试图让我的 ListView 正确伸展并找到这个答案。 我正在使用 Visual Studio 2017 并从事 UWA(通用 Windows 应用)项目。

      我正在更改项目模板添加的默认 Grid 元素,当它被添加为网格行/列时,我无法拉伸 ListView。

      我终于偶然发现了可以直接添加到 ListView 元素的 XAML:

      HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
      

      如您所见,效果很好:

      【讨论】:

      • 拉伸列表视图本身和拉伸列表视图中的项目是有区别的。我建议您再次阅读问题和答案,并尝试一些示例以查看差异。
      • 哦,有趣。也许原始帖子上的快照可能会有所帮助?谢谢
      猜你喜欢
      • 2020-01-19
      • 2019-01-15
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 2017-11-11
      • 1970-01-01
      相关资源
      最近更新 更多