您好我正在尝试获取wpf按钮的屏幕矩形,以便我可以突出显示它。
我用它来达到同样的目的:
AutomationPeer theBtnPeer = createPeerForElement(btn); Rect rect = theBtnPeer.GetBoundingScreenRectangle();
这很好用,给我正确的矩形。
但是..如果按钮当前不可见,那么我在这个btn上调用BringIntoView()成功地将这个按钮带入视图,但是当我再次调用它上面的GetBoundingSCreenRectangle()时。它给了我与之前调用BringIntoView()之前相同的旧值。
如何获取此按钮的新边界矩形?
由于
答案 0 :(得分:1)
您可以通过ActualHeight和ActualWidth属性获取矩形的高度和宽度。
窗口中的坐标取决于按钮所在的布局控件的类型。
如果您的目标是高亮,我建议另一条路线:更改按钮的模板以包含一个高亮矩形,默认情况下不可见,并带有触发器,以便在满足某些条件时使其可见。
或使用视觉状态,具有突出显示和未突出显示的状态,并具有使高亮矩形可见的过渡。
答案 1 :(得分:0)
如果问题是未更新位置属性,请调用ScrollViewer.UpdateLayout()
以强制重新计算与布局相关的属性。
如果问题是该方法始终为给定控件返回相同的值,那么您可能正在寻找Visual.PointToScreen()方法。这将为您提供相对于屏幕左上角的绝对坐标。在你的按钮上调用它,如:
btn.PointToScreen(new Point(0, 0));
您要对返回的矩形做什么?您是否定位与按钮,弹出窗口或其他内容位于同一容器中的内容?如果您可以扩展示例代码以提供使用生成的矩形的代码部分,那么这将有助于我们确定问题所在。