C# 为什么ListView行会随机变得非常高?

C# 为什么ListView行会随机变得非常高?,c#,wpf,listview,C#,Wpf,Listview,我在网格的第一行有一个ListView。通过双击下面GridControl中的项目,有一些数据填充每一行。因此,它的主要思想是单击GridControl项,以便在ListView中也可以看到它 问题很奇怪:第一个项目总是被添加,并且在ListView中看起来很正常,但是接下来的项目可能会以随机顺序变得非常大 我没有找到任何ListView.Rows属性或类似属性。所以我不能明确地设置我想要的方式 有一个网格,ListView在其中保存: <Grid.RowDefinitions>

我在网格的第一行有一个ListView。通过双击下面GridControl中的项目,有一些数据填充每一行。因此,它的主要思想是单击GridControl项,以便在ListView中也可以看到它

问题很奇怪:第一个项目总是被添加,并且在ListView中看起来很正常,但是接下来的项目可能会以随机顺序变得非常大

我没有找到任何ListView.Rows属性或类似属性。所以我不能明确地设置我想要的方式

有一个网格,ListView在其中保存:

<Grid.RowDefinitions>
    <RowDefinition Height="200" x:Name="xSelectedRow"/>
    <RowDefinition Height="4"/>
    <RowDefinition Height="*"/>
    <RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
有一个包含一些列的ListView:

<ListView x:Name="xListSelected" BorderBrush="Transparent" Grid.Row="0" 
          ItemsSource="{Binding SelectedItemsSource}"
          SelectedItem="{Binding SelectedSelectedItem}">

    <ListView.Resources>
        <Style TargetType="{x:Type GridViewColumnHeader}">
            <Setter Property="Padding" Value="10 2 4 2" />
            <Setter Property="Visibility" Value="Collapsed" />
        </Style>
    </ListView.Resources>

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseDoubleClick">
            <i:InvokeCommandAction
                Command="{Binding RemoveSelectedItemCommand}"  
                CommandParameter="{Binding ElementName=LayoutRoot, Path=SelectedItem}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>

    <ListView.View>                        
        <GridView>
            <GridView.Columns>
                <GridViewColumn Width="{Binding Path=ActualWidth, ElementName=xProjectViewId}">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock TextWrapping="Wrap" Text="{Binding Id}"
                                       FontSize="14"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Width="{Binding Path=ActualWidth, ElementName=xName}" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock TextWrapping="Wrap" Text="{Binding Name}"
                                       FontSize="14"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView.Columns>                            
        </GridView>
    </ListView.View>
</ListView>
以下是指向图像的链接:

图像中有一个示例,第一、第二和第三行看起来正常,但第四行非常大。看起来并不总是这样的:接下来的两行是正常的,但是接下来的三行又变大了


你见过这样的问题吗?

假设你所说的网格写在这里:

<Grid.RowDefinitions>
        <RowDefinition Height="200" x:Name="xSelectedRow"/>
        <RowDefinition Height="4"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
每行的高度定义不一致

特定的数字将给出特定的高度,但某些参数可能会更改并缩放此高度。这就解释了为什么第一行仍然正确。 一个星号*将告诉代码使行与网格成比例 自动生成行以适应内容的大小。包装和填充可能会导致意外结果。
我建议尝试为所有行指定一个足够大的特定高度200,或者将所有行都设置为星形*

关于为什么有些行更高的问题,答案是:

将TextBlock设置为wrap,并将其中的字符串设置为wrap,然后使这些控件增长

这不是随机的

决定你喜欢哪一种

当前已增加某些行的高度

通过设置maxheight截断字符串

降低Name变量的大小,以便他们只能输入这么多

一些混合物


以其他方式重新排列UI。

您的xaml看起来很混乱,尤其是ListView的绑定。您的元素是否需要这些名称?你能设置CanContentScroll=False吗?@XAMIMAX,我应该在哪里设置它?它将提供什么?您将使用数据绑定,即修改ListView的集合,并让ListView处理新添加的项。如何将项目添加到列表视图?我无法了解您的图像安全限制。当您从gridview中的两个文本块中删除TextWrapping=Wrap时会发生什么情况?@Andy,删除TextWrapping可以解决这个问题,谢谢,但是知道有些字符串太长,所以列中没有足够的空间来显示它。不,网格,您指的是ListView的容器