我在WPF中有一个ListView,它会在我向其添加项目时调整整个应用程序窗口的大小。我将ListView大小绑定到它所在的网格,它绑定到窗口大小。因此,当用户调整窗口大小时,ListView会增长。问题是,当我向ListView添加项目时,它会自动拉伸以尝试适应新内容,这又会拉伸整个窗口的大小。
有没有阻止这种行为发生?
答案 0 :(得分:4)
将窗口的SizeToContent更改为手动或宽度(不应存在高度)。这样可以防止窗口本身根据内容自动改变其高度。
答案 1 :(得分:1)
您想将VerticalAlignment
属性设置为“Stretch
”。如有必要,也可以在父控件中,依此类推,直到您进入Window控件。
需要注意的是,如果上升中的一个控件是StackPanel
,则它不会伸展以适应,但总是会扩展以适应其内容。所以请远离StackPanels
,使用Stretch
,然后设置好!
删除你的Bindings,它们很可能是TwoWay:所以listview增加它的大小会让你的窗口增长!
希望有所帮助!
答案 2 :(得分: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;
答案 3 :(得分:0)
您是否尝试过设置MaxWidth属性?
答案 4 :(得分:0)
您可以在xaml中为MaxHeight
设置ListView
属性,不是吗?
答案 5 :(得分:0)
将 ListView
放在一个灵活的控件中,该控件会随着您调整窗口大小而调整大小,例如,Border
。这样,当 Window
调整大小时,Border
调整大小,而当 Border
调整大小时,ListView
调整大小。
将 MaxHeight
的 ListView
属性绑定到 ActualHeight
的 Border
属性。这样,ListView
就无法调整 Border
的大小。
有关如何实现这一目标的详细信息,请参阅此答案(针对一个实际重复的问题,该问题也大约有 10 年历史):https://stackoverflow.com/a/68498797/773113