複数の解像度を処理するために、同じxamlページに次のコントロールがあります。
- グリッド->ビューボックス(ストレッチ、中央)->キャンバス(中央)->長方形X(中央)
- FrameworkElement
ページ全体を黒いオーバーレイで覆い、ページの中央にある長方形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));)
そして問題は、ビューボックスのサイズを変更すると(解像度に応じて)、RectangleXはその位置を変更しますが、PointToScreenは常に同じ画面座標を返すことです。
ビューボックスを変更せずに、RectangleXのすぐ上の適切な場所に穴を開けます。
除外長方形を描画するために、RectangleXの正しい座標を取得するにはどうすればよいですか?
よろしくお願いします。
ありがとうございました
ピーター