在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
显然,比例变换是我最感兴趣的。
答案 0 :(得分:3)
Matthew,正如您所指出的那样ActualWidth
和ActualHeight
如果您应用变换则不会更改。 ActualWidth
和ActualHeight
表示布局系统完成计算控件大小后的计算宽度/高度(基于Margin
,HorizontalAlignment
等值)
获取控件大小的一种方法是考虑所有已应用于它的比例变换,即向上走可视树并将所有比例变换应用于ActualWidth
和{{1}一个控件:
ActualHeight
请注意,如果您的可视树很深或者您执行此操作很多次,这可能效率很低。然而,在实践中,我从来没有遇到任何问题。
答案 1 :(得分:2)
你可以简单地应用变换:
control.LayoutTransform.Transform(new Point(0,0))
答案 2 :(得分:1)
是的,您可以查看任何ActualWidth
上的ActualHeight
和FrameworkElement
来解决此问题。如果你有隐藏的元素,你需要检查它是否可见。
如果您想知道加载控件后使用Loaded
事件。