2

わかりました、私は困惑しています。これが正方形をレンダリングしないのはなぜですか? (注、原点に関係なく表示されるように、意図的に正と負の座標を使用しました。x / yが逆になっているかどうかなどはわかりませんでした。)

public partial class Main : Window
{
    StreamGeometry _cueGeometry;
    Brush          _cueBrush;
    Pen            _cuePen;

    public Main()
    {
        InitializeComponent();

        _cueGeometry = new StreamGeometry();
        using (var geometryContext = _cueGeometry.Open())
        {
            geometryContext.BeginFigure(new Point( 40, 40), true, true);
            geometryContext.LineTo     (new Point( 40,-40), true, true);
            geometryContext.LineTo     (new Point(-40,-40), true, true);
            geometryContext.LineTo     (new Point(-40, 40), true, true);
        }
        _cueGeometry.Freeze();

        _cueBrush = Brushes.AliceBlue;

        _cuePen = new Pen(Brushes.Gray, 1);
        _cuePen.Freeze();

    }

    protected override void OnRender(DrawingContext dc)
    {
        base.OnRender(dc);
        dc.DrawGeometry(_cueBrush, _cuePen, _cueGeometry);
    }

}

アップデート

私は別の奇妙なことに気づきました。このコードを赤い背景を持つ Panel のサブクラスに移動すると、赤い背景がレンダリングされ、その前に灰色の境界線がある青い正方形がレンダリングされます。(注:コントロールの境界にクリップされていないため、その正方形全体を見ることができます。)

ただし、単にサブクラスを UserControl に変更すると、灰色の境界線を持つ青い四角形が赤いコントロールの背後にレンダリングされます。(繰り返しますが、クリッピングが無効になっているため、これを見ることができます。)

最後にそれを Control のサブクラスに変更すると、赤い背景が表示されなくなり、灰色の境界線を持つ青い四角形のみが表示されます。これは、Control が独自にレンダリングを行わないためですが、Panel ではなく UserControl の描画で背景色がレンダリングされる理由をまだ説明していないためです。レンダリングされたものの前に表示されるテンプレートの一部である要素があると思いますが、それが何であるかはわかりません。

4

2 に答える 2

1

それを見つけた。ウィンドウのデフォルトのテンプレートでは、コンテンツ領域に不透明な白い背景の境界線があり、レンダリングが妨げられています。Snoopを使用して、境界線を見つけ、可視性を「非表示」に変更しました。確かに、レンダリングされたパスがありました。

謎が解けた!

于 2012-12-21T00:28:31.063 に答える
0

または、ウィンドウBackgroundTransparentまたはに設定するだけ{x:Null}です。

于 2012-12-21T07:48:18.873 に答える