c# - 在渲染之前确定 SizeToContent WPF 窗口的大小

标签 c# wpf sizetocontent

我的 WPF 应用程序中有时会显示一个窗口。当它显示时,它会淡入动画,而当它关闭时,它会淡出。没什么特别的,只是一个修改不透明度的 Storyboard。实际上窗口从来没有真正关闭过,不透明度只是淡出到 0,直到它再次显示。

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

在窗口淡入之前更新内容。因为窗口的大小是根据内容来增加或减小的。宽度和高度可以改变。

当定位窗口时,比方说,在右下角,我简单地获取屏幕的 WorkingArea(宽度和高度)然后减去窗口的宽度/高度以获得我需要的顶部和左侧位置.

逻辑有效,但我遇到的问题是窗口的高度和宽度没有返回内容更新后的大小,而是返回上次显示时的大小。我假设这是因为它尚未使用新内容呈现。

这让我很伤心,因为如果窗口比上次明显超出屏幕时更大。

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

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

如有任何帮助,我们将不胜感激!

最佳答案

我找到了我自己问题的答案。更新内容后,只需调用窗口的 UpdateLayout() 方法即可强制进行更新。调用宽度和高度然后返回准确值。

关于c# - 在渲染之前确定 SizeToContent WPF 窗口的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2144214/

相关文章:

c# - 文件关联导致 Clickonce 安装失败

c# - 检测用户是否在 WPF 中移动了窗口

WPF:根据内容计算窗口大小

c# - 如何从不活动但与事件服务器连接的服务器设置 Img src

c# - 处理我需要从我的方法返回的数据表对象

c# - 按周分组 EF Core 2.1

c# - 在多个页面上打印包含列表框的堆栈面板 wpf

listview - Xamarin.Forms ListView 大小适合内容吗?

c# - 我可以在 WPF 中使用 "defeat"SizeToContent 的面板吗?

c# - 子属性更改时触发 RaisePropertyChanged - MvvmCross