在呈现之前确定SizeToContent WPF窗口的大小

时间:2010-01-27 02:34:59

标签: c# wpf sizetocontent

我的WPF应用程序中有一个窗口,偶尔会显示。当它显示时,它以一个动画淡入,当它关闭时它会淡出。没什么好看的,只是一个修改不透明度的故事板。实际上窗口永远不会真正关闭,不透明度会逐渐淡化为0,直到它再次显示为止。

此窗口是一个信息窗口,并不总是显示相同的内容。它的大小与内容(宽度和高度)相同,在这方面效果很好。用户选择屏幕的基本区域以显示它(TopLeft,TopRight,Center,BottomLeft,BottomRight)。

在窗口淡入之前,内容会更新。因为窗口的大小适合于内容,所以窗口的大小会增加或减小。宽度和高度可以改变。

当定位窗口时,让我们说,在右下角,我只需要取屏幕的工作区域(宽度和高度),然后减去窗口的宽度/高度,以获得我需要的顶部和左侧位置。

逻辑有效,但我遇到的麻烦是Window的高度和宽度没有返回内容更新后的大小,但返回的是上次显示时的大小。我假设这是因为它尚未使用新内容进行渲染。

如果Window比上次显然从屏幕上伸出的那么大,这会让我感到悲伤。

我尝试在OnContentRendered事件中定位窗口,但这仅在创建Window时触发一次,而不是在内容更新后,当不透明度设置为0时触发。

有没有人知道如何在淡入窗口之前获得该窗口的准确宽度和高度?

任何帮助都将不胜感激!!

1 个答案:

答案 0 :(得分:6)

我找到了自己问题的答案。更新内容后,对窗口的UpdateLayout()方法的简单调用会强制更新。调用宽度和高度然后返回准确的值。