【发布时间】:2017-11-03 01:06:44
【问题描述】:
我有一种情况,我需要在 WPF 上获取视觉元素的渲染大小。我的意思是,我需要获取视觉空间上某些东西所消耗的空间,例如应用了DropShadowEffect 的Button 而不仅仅是ActualWidth 和ActualHeight 属性的值。
例如,考虑以下场景:
<Button Width="100" Height="100">
<Button.Effect>
<DropShadowEffect BlurRadius="10" ShadowDepth="0"/>
</Button.Effect>
</Button>
如您所见,按钮的大小为 100x100,但由于它有一个模糊半径为 10 的阴影,因此需要 120x120 的渲染空间。
如何在 WPF 中获取此按钮的渲染大小(即 120x120)?
StackOverflow 上已经有另一个类似的问题,但没有得到确切的答案。所以我要问这个问题。
关于我要达到的目标的其他详细信息
我需要这个的情况如下:
我需要将自定义窗口的可视框架扩展到窗口边界之外。为了实现这一点,我在实际窗口的边界周围使用了 4 个其他相邻的窗口。在每个相邻的窗口中,我显示一个VisualBrush,它显示将在窗口外显示的内容(如投影),就像在普通控件上一样。但是要知道应用于每个相邻窗口的确切大小并使VisualBrush 的内容与主窗口内容对齐,我至少需要知道内容的大小和位置。
也许,也许还有另一种方法可以实现这一点......
【问题讨论】:
-
额外的窗口对我来说似乎只会让事情变得复杂。将
DockPanel与您的“扩展”一起用作停靠在顶部、左侧、右侧和底部的元素,而实际内容停靠以填充中心不是更简单吗?这样一来,所有内容都包含在一个窗口中,该窗口会自动增长到适合内容和效果所需的任何大小,您无需担心诸如阴影之类的实际大小。 -
@BradleyUffner 好吧,我尝试了不同的方法来实现越界功能。对我来说,使用额外的“幽灵”窗口是迄今为止取得最佳效果的方法。用户不知道这些额外的窗口,并且从 shell 的角度来看,一切都按预期工作。我认为它就像 Visual Studio 一样,因为它的窗口周围有模糊效果。