2

複数の解像度を処理するために、同じ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の正しい座標を取得するにはどうすればよいですか?

よろしくお願いします。

ありがとうございました

ピーター

4

1 に答える 1

0

私はこれに数日間苦労しています...しかし、質問を投稿してから10分後に解決策を見つけました...

答え:

ビューボックスの幅と最大幅を変更した後、UpdateLayout()を呼び出す必要があります

今は動作します!

p。

于 2010-06-17T17:12:57.713 に答える