【发布时间】:2010-06-26 22:48:48
【问题描述】:
我在 WPF 中有一个 ListView,每当我向其中添加项目时,它都会调整整个应用程序窗口的大小。我将 ListView 大小绑定到它所在的网格,该网格绑定到窗口大小。因此,当用户调整窗口大小时,ListView 会增长。问题是当我向 ListView 添加项目时,它会自动拉伸以尝试适应新内容,这反过来又会拉伸整个窗口的大小。
有没有办法防止这种行为发生?
【问题讨论】:
我在 WPF 中有一个 ListView,每当我向其中添加项目时,它都会调整整个应用程序窗口的大小。我将 ListView 大小绑定到它所在的网格,该网格绑定到窗口大小。因此,当用户调整窗口大小时,ListView 会增长。问题是当我向 ListView 添加项目时,它会自动拉伸以尝试适应新内容,这反过来又会拉伸整个窗口的大小。
有没有办法防止这种行为发生?
【问题讨论】:
将窗口的 SizeToContent 更改为 Manual 或 Width(不应有 Height)。这将阻止窗口本身根据内容自动更改其高度。
【讨论】:
您想将VerticalAlignment 属性设置为“Stretch”。如有必要,也可以在父控件中,依此类推,直到您在 Window 控件中。
需要注意的是,如果向上的控件之一是StackPanel,它将不会拉伸以适应其内容,但始终会扩展以适应其内容。所以远离StackPanels,使用Stretch,就可以了!
也删除您的绑定,它们很可能是 TwoWay:所以列表视图增加其大小正在使您的窗口增长!
希望有帮助!
【讨论】:
您可以使用以下代码。
首先获取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;
【讨论】:
您是否尝试过设置 MaxWidth 属性?
【讨论】:
您可以在 xaml 中为您的 ListView 设置 MaxHeight 属性,不是吗?
【讨论】:
将ListView 放在一个灵活的控件中,该控件会随着您调整窗口大小而调整大小,例如Border。这样,Window 调整大小时,Border 调整大小,Border 调整大小时,ListView 调整大小。
将ListView 的MaxHeight 属性绑定到Border 的ActualHeight 属性。这样,ListView 无法调整 Border 的大小。
有关如何实现这一点的详细信息,请参阅此答案(对于一个实际上重复的问题,也有大约 10 年的历史):https://stackoverflow.com/a/68498797/773113
【讨论】: