WPF:我可以在应用转换后获得UIElement的大小吗?

时间:2009-07-23 04:21:12

标签: wpf silverlight transform uielement

在WPF / Silverlight中,我可以在应用转换后获得UIElement的计算值吗?

(根据下面的评论):

我有一个堆栈面板,我已经应用了TranformGroup。该组中有两个翻译和一个比例变换。

(警告,前面的伪代码)

groupTransform.children.add(new TranslateTransform());
groupTransform.children.add(new ScaleTransform());
groupTransform.children.add(new TranslateTransform());
containerToScale.RenderTransform = groupTransform;
...
// code that sets values to all the transforms

显然,比例变换是我最感兴趣的。

3 个答案:

答案 0 :(得分:3)

Matthew,正如您所指出的那样ActualWidthActualHeight如果您应用变换则不会更改。 ActualWidthActualHeight表示布局系统完成计算控件大小后的计算宽度/高度(基于MarginHorizontalAlignment等值)

获取控件大小的一种方法是考虑所有已应用于它的比例变换,即向上走可视树并将所有比例变换应用于ActualWidth和{{1}一个控件:

ActualHeight

请注意,如果您的可视树很深或者您执行此操作很多次,这可能效率很低。然而,在实践中,我从来没有遇到任何问题。

答案 1 :(得分:2)

你可以简单地应用变换:

control.LayoutTransform.Transform(new Point(0,0))

答案 2 :(得分:1)

是的,您可以查看任何ActualWidth上的ActualHeightFrameworkElement来解决此问题。如果你有隐藏的元素,你需要检查它是否可见。

如果您想知道加载控件后使用Loaded事件。