2010-09-26 45 views
3

嗨我想获得一个wpf按钮的屏幕矩形,以便我可以突出显示它。如何获得wpf按钮屏幕矩形

我使用它来实现相同的:

的AutomationPeer theBtnPeer = createPeerForElement(BTN); Rect rect = theBtnPeer.GetBoundingScreenRectangle();

这工作正常,给我正确的矩形。

但是,如果按钮当前不可见,那么我调用BringIntoView()在这个btn上成功地将这个按钮放到视图中,但是当我再次调用GetBoundingSCreenRectangle()。它给了我与之前调用BringIntoView()时相同的旧值。

如何获取此按钮的新边界矩形?

感谢

+0

请在您的句子中添加逗号......您的问题非常痛苦,请阅读 – 2010-09-26 22:37:55

回答

1

您可以通过获得的ActualHeight和ActualWidth属性的高度和矩形的宽度。

在窗口的坐标将取决于布局控件按钮在类型

如果你的目标是hightlight,我建议另一条路线:更改按钮的模板中包含的一大亮点矩形,默认情况下是不可见的,如果满足某些条件,则使用触发器使其可见。

或者使用视觉状态,已突出显示且未突出显示的状态,并带有使突出显示矩形可见的转变。

+0

感谢您的回复。 对不起,格式不佳..好像我不能按{ENTER}来到新线。 它不仅突出显示我想要做..我实际上有兴趣获得正确的屏幕坐标为一些其他功能也。 什么使我困惑的是为什么代码, AutomationPeer theBtnPeer = createPeerForElement(btn); theBtnPeer.GetBoundingRectangle();滚动后, 没有给出正确的矩形。谢谢。 – Rahul 2010-09-27 06:57:12

+0

作为HTML,简单的回车被忽略,但第二个将做的伎俩(我编辑的问题)。你有没有尝试递归获取视觉树的边界矩形,向上?GetBoundingRectangle _may_返回父级内的坐标,这意味着获得其边界等。 – Timores 2010-09-27 09:35:46

0

如果问题是位置属性未更新,请致电ScrollViewer.UpdateLayout()强制重新计算与布局相关的属性。

如果问题是该方法始终返回给定控件的相同值,那么您可能正在寻找Visual.PointToScreen()方法。这会给你相对于屏幕左上角的绝对坐标。调用此您的按钮,如:

btn.PointToScreen(new Point(0, 0));

你打算用返回的矩形办?你是否定位与按钮,弹出窗口或其他东西在同一个容器中的东西?如果您可以扩展您的示例代码以提供使用生成的矩形的代码部分,那将有助于我们确定问题所在。