我正在努力实现一个根据某些属性更改其大小的用户控件。据我所知,winforms布局引擎会在执行布局时询问每个子控件的首选大小,并告知它们可以承受的最大大小。
这是msdn中的GetPreferredSize的描述:
Control.GetPreferredSize(Size proposedSize)
检索可以装入控件的矩形区域的大小。
我对以下内容感到困惑:
您可以返回大于的尺寸 约束中表示的约束 proposedSize参数,但是 提议大小应该减少 约束减少。
这是什么意思?如果我返回的尺寸大于建议值,会发生什么?
有人可以解释一下这是如何运作的?
答案 0 :(得分:2)
该行的含义是您可以自由地返回比proposedSize
参数更大的首选大小,但proposedSize
仍应影响您的首选大小。例如,GetPreferredSize(new Size(100, 0)
的返回大小应小于GetPreferredSize(new Size(200, 0))
的返回大小。
请注意,如果返回更大的尺寸,则不会发生任何不良情况;布局引擎会为您排序所有内容,可能会减少另一个控件的可用大小。最终,您的首选大小只是引擎的一个提示,因此它知道它正在安排的各种UI组件的相对空间需求。
答案 1 :(得分:1)
Control.GetPreferredSize 由容器调用,作为布局周期的一部分。
它允许被调用的控件返回他们想要的大小(如果可能)。但是,容器不必遵循此请求的大小。例如,当控件的Dock设置为Top时,无论GetPreferredSize方法返回的值如何,宽度都将定义为包含控件的宽度。此方法对于流式布局控件等容器特别有用,它将逐个定位每个子控件。