防止在WPF/C#中向ListView添加项时调整窗口大小

6
我在WPF中有一个ListView,每当我向其中添加项目时,整个应用程序窗口都会调整大小。我将ListView的大小绑定到它所在的网格上,该网格又绑定到窗口大小上。因此,当用户调整窗口大小时,ListView会增长。问题是,当我向ListView添加项目时,它会自动拉伸以尝试适应新内容,这反过来会拉伸整个窗口的大小。
有没有办法防止发生这种行为?
6个回答

5

将窗口的SizeToContent属性更改为Manual或Width(不应该有Height)。这将防止窗口根据内容自动更改其高度。


1
你可以使用以下代码。
首先获取listview onload的值。然后将其存储在一个变量中,然后在ColumnWidthChanging事件属性中执行此代码,如下所示:
     e.cancel = true;
     e.NewWidth = // the declared variable in which you store the list view with value in the onload function of the form

 int a = 100;
    e.cancel =true;
    e.NewWidth = a;

1

您想将VerticalAlignment属性设置为'Stretch'。如果需要,在父控件中也要这样做,以此类推,直到您在Window控件中。

但是请注意,如果上行的控件之一是StackPanel,它将不会拉伸以适应,而是始终扩展以容纳其内容。因此,请远离StackPanels,使用Stretch,然后您就可以了!

还要删除绑定,它们很可能是双向的:因此,列表视图增加其大小会使窗口增大!

希望这有所帮助!


0

你尝试设置MaxWidth属性了吗?


1
我不想在此设置最大宽度或高度,因为我希望当有人调整窗口大小时,它可以被重新调整大小。但是,我不希望它在向ListView添加内容时自动调整大小。 - Kirk Ouimet
将ListViewItems的MaxWidth绑定到ListView的MaxWidth? - cristobalito
我这里没有开发环境,但以下大致是代码:<Style DataType={x:Type ListViewItem}> <Setter Property="MaxWidth" Value={RelativeSource Mode=Ancestor, Type=ListView, Path=MaxWidth} /> </Style> - cristobalito

0

你可以在XAML中设置ListViewMaxHeight属性,不是吗?


我不想在此设置最大宽度或高度,因为我希望当有人调整窗口大小时,它可以被重新调整大小。但是,我不希望它在向ListView添加内容时自动调整大小。 - Kirk Ouimet

0

10年后...

  1. ListView 放在一个灵活的控件内,例如一个 Border,这样当 Window 调整大小时,Border 也会调整大小,而当 Border 调整大小时,ListView 也会调整大小。

  2. ListViewMaxHeight 属性绑定到 BorderActualHeight 属性。这样,ListView 就无法调整 Border 的大小。

有关如何实现此操作的详细信息,请参见此答案(针对一个几乎相同的问题,也是10年前的):https://dev59.com/MVDTa4cB1Zd3GeqPI2vH#68498797


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接