XAML WinUI 3 ListViewItem Width不符合ListView Width

kknvjkwl  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(138)

个人评论

这实际上已经驾驶我有点糊涂;我只是似乎不能得到预期的结果,所以任何帮助这是非常感谢。

问题陈述

我在NavigationViewItem中有一个ListView,因为我希望能够在Shell视图中使用项目重新排序和拖放功能,而目前NavigationView控件并不真正支持这一点。
我遇到的问题是,当NavigationView控件在它的最小化视图(IsPaneOpen="false")中时,ListView不遵守宽度更改,子项也不遵守ListView宽度。
Tldr:当NavigationView Control IsPaneOpen=“false”发生时,按钮只显示图像而不是文本,并且它仍然居中,适当的填充/边距圆角,就像NavigationViewItem一样,即其中之一:

<NavigationViewItem
    x:Uid="Shell_Main"
    Icon="Target" />

字符串
基本上是这样的:
x1c 0d1x的数据
看起来像这样:


我所尝试的

我试过使用ItemContainerStyle,但这会删除样式和选择指示符。

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


我也试过手动设置所有东西的宽度,这样我至少可以看到什么可以复制我试图实现的东西,这也是不可能的。
到目前为止,我已经看过的一些内容:

  1. How to dynamically scale column width in UWP ListView with DataTemplate like table
  2. https://github.com/microsoft/microsoft-ui-xaml/issues/3682
  3. WinUI list control that allows for dynamic item size, reordering, and virtualization

XML

<NavigationViewItem Visibility="{x:Bind ViewModel.ShowSC, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}">
    <NavigationViewItem.Template>
        <ControlTemplate>
            <Border Width="auto" Height="auto">
                <ContentPresenter />
            </Border>
        </ControlTemplate>
    </NavigationViewItem.Template>
    <Grid
        x:Name="scOuterGrid"
        MinHeight="100"
        HorizontalAlignment="Stretch">
        <ListView
            x:Name="lstvSC"
            HorizontalAlignment="Stretch"
            AllowDrop="True"
            CanDragItems="True"
            CanReorderItems="True"
            DragItemsCompleted="lstvSpotlightChats_DragItemsCompleted"
            DragItemsStarting="lstvSpotlightChats_DragItemsStarting"
            ItemsSource="{x:Bind ViewModel.SCC, Mode=OneWay}"
            SelectedItem="{x:Bind ViewModel.SelectedSC, Mode=TwoWay}"
            SelectionChanged="lstvSC_SelectionChanged"
            SelectionMode="Single"
            SizeChanged="lstvSC_SizeChanged">
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="models:CM">
                    <Grid
                        HorizontalAlignment="Stretch"
                        ColumnSpacing="14"
                        ToolTipService.ToolTip="{x:Bind MenuItemName}">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="auto" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <BitmapIcon
                            Grid.Column="0"
                            Width="24"
                            Margin="-4,0,0,0"
                            UriSource="{x:Bind IP, Converter={StaticResource SCIconConverter}}" />
                        <TextBlock
                            Grid.Column="1"
                            VerticalAlignment="Center"
                            Text="{x:Bind MenuItemName}"
                            Visibility="Collapsed" />
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
            <ListView.Header>
                <TextBlock
                    x:Name="lstviewSH"
                    Margin="15,15,0,15"
                    FontSize="14"
                    FontWeight="SemiBold"
                    Foreground="{ThemeResource TextBoxForegroundHeaderThemeBrush}"
                    OpticalMarginAlignment="TrimSideBearings"
                    Text="SC" />
            </ListView.Header>
            <i:Interaction.Behaviors>
                <i:BehaviorCollection>
                    <core:EventTriggerBehavior EventName="DragItemsStarting">
                        <core:InvokeCommandAction Command="{x:Bind ViewModel.OnSpotlightDragItemsStartingCommand}" />
                    </core:EventTriggerBehavior>

                    <core:EventTriggerBehavior EventName="DragItemsCompleted">
                        <core:InvokeCommandAction Command="{x:Bind ViewModel.OnSpotlightDragItemsCompletedCommand}" />
                    </core:EventTriggerBehavior>

                    <core:EventTriggerBehavior EventName="DragOver">
                        <core:InvokeCommandAction Command="{x:Bind ViewModel.OnSpotlightDragOverCommand}" />
                    </core:EventTriggerBehavior>

                    <core:EventTriggerBehavior EventName="Drop">
                        <core:InvokeCommandAction Command="{x:Bind ViewModel.OnSpotlightDropCommand}" />
                    </core:EventTriggerBehavior>

                    <core:EventTriggerBehavior EventName="SelectionChanged">
                        <core:InvokeCommandAction Command="{x:Bind ViewModel.OnChatSelectedNavigateCommand}" />
                    </core:EventTriggerBehavior>
                </i:BehaviorCollection>
            </i:Interaction.Behaviors>
        </ListView>
        <Grid
            x:Name="dropGridSpotlight"
            HorizontalAlignment="Stretch"
            VerticalAlignment="Stretch"
            AllowDrop="True"
            Visibility="Collapsed">
            <Grid
                Margin="4"
                HorizontalAlignment="Stretch"
                VerticalAlignment="Stretch"
                Background="{ThemeResource AcrylicBackgroundFillColorBaseBrush}"
                BorderBrush="DarkGoldenrod"
                BorderThickness="1"
                CornerRadius="5"
                Opacity="0.8" />
            <BitmapIcon
                x:Name="dropIconSpotlight"
                Width="32"
                Height="32"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Foreground="DarkGoldenrod"
                UriSource="ms-appx:///Assets/Icons/torch-64.png" />
            <i:Interaction.Behaviors>
                <i:BehaviorCollection>
                    <core:EventTriggerBehavior EventName="DragOver">
                        <core:InvokeCommandAction Command="{x:Bind ViewModel.OnSpotlightDragOverCommand}" />
                    </core:EventTriggerBehavior>

                    <core:EventTriggerBehavior EventName="Drop">
                        <core:InvokeCommandAction Command="{x:Bind ViewModel.OnSpotlightDropCommand}" />
                    </core:EventTriggerBehavior>
                </i:BehaviorCollection>
            </i:Interaction.Behaviors>
        </Grid>
    </Grid>
</NavigationViewItem>

xiozqbni

xiozqbni1#

通常情况下,在我给予的确切时刻,在试图解决这个问题后,我抓了几天我的头,我做了一个深入的潜水到实时视图树在VS2022,而调试项目,并找到了一些属性的ListViewItem需要改变,使其完全符合我的要求。
然而很明显,当我设置它们时,它删除了ListViewItem控件的默认样式。然后我偶然发现了样式BasedOn的概念.启示。

<ListView.ItemContainerStyle>
     <Style BasedOn="{StaticResource DefaultListViewItemStyle}" TargetType="ListViewItem">
         <Setter Property="MinWidth" Value="0" />
         <Setter Property="Padding" Value="12,0,0,0" />
     </Style>
 </ListView.ItemContainerStyle>

字符串
上面的样式基本上继承了默认的ListViewItem样式,并允许您简单地修改几个属性,而不会丢失其他样式属性。


的数据
所以,只是在关闭的机会,任何其他人遇到同样的问题,在这里,它是在所有的荣耀。

相关问题