为了处理多个分辨率,我在同一个xaml页面中有以下控件。
我试图用黑色覆盖覆盖整个页面,并为页面中心的矩形X剪切一个矩形。
要创建黑色叠加层,我将整个页面涂成黑色,然后:
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen())
{
double sw = SystemParameters.PrimaryScreenWidth;
double sh = SystemParameters.PrimaryScreenHeight;
PathGeometry cmbg = null;
RectangleGeometry rectangleFullScreen = new RectangleGeometry(new Rect(0, 0, sw, sh));
cmbg = Geometry.Combine(Geometry.Empty, rectangleFullScreen, GeometryCombineMode.Union, null);
RectangleGeometry rectangleHole = new RectangleGeometry(holeRectangle);
cmbg = Geometry.Combine(cmbg, rectangleHole, GeometryCombineMode.Exclude, null);
Brush b = new SolidColorBrush(Colors.Black);
b.Opacity = 0.85;
dc.DrawGeometry(b, new Pen(), cmbg);
}
return dv;
为了计算要排除的矩形,我得到了RectangleX的屏幕坐标(.PointToScreen(new Point(0,0));)
问题在于,如果我修改Viewbox的大小(取决于分辨率),RectangleX会更改其位置,但PointToScreen始终返回相同的Screen坐标。
如果没有更改视图框,则会在RectangleX正上方的正确位置剪切孔。
如何获取RectangleX的正确坐标以绘制排除矩形?
我非常感谢你的帮助。
谢谢
彼得
答案 0 :(得分:0)
我几天来一直在努力解决这个问题......但是在发布问题10分钟后找到了解决方案......
解答:
更改Viewbox的宽度和最大宽度后,我必须调用UpdateLayout()
现在有效!
第