6

問題があります

AdornerLayer AdornerLayer = AdornerLayer.GetAdornerLayer (layout);

このメソッドは常に null を返します。

私は何を間違っていますか?

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        Layout layout = new Layout();
        layout.Background = Brushes.White;
        layout.ClipToBounds = true;
        layout.SnapsToDevicePixels = true;
        layout.Width = 4965; layout.Height = 3515;

        AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(layout);
        adornerLayer.Add(new LayoutAdorner(layout));
    }
}


public class Layout : Canvas
{
    public Visual GetVisualChildAtPoint(Point point)
    {
        return VisualTreeHelper.HitTest(this, point).VisualHit as Visual;
    }
}

public class LayoutAdorner : Adorner
{
    public LayoutAdorner(UIElement adornedElement) : base(adornedElement) { }

    protected override void OnRender(DrawingContext drawingContext)
    {

    }
}
4

3 に答える 3

10

AdornerLayerウィンドウが実際にロードされ、ハンドルが作成されるまで、ウィンドウの は作成されません。

これをコンストラクターに配置する代わりに、ウィンドウがロードされたときに遅延して追加する必要がある場合があります。

于 2013-04-30T19:30:10.070 に答える
0

フォームが更新された後、Content.UpdateLayout(); を呼び出します。コンテンツのすべての視覚的な子要素がレイアウト用に適切に更新されたことを確認します。MSDN 公式

(私はそれほど頭が良くないので、ここからソリューションをコピーしただけです): AdornerLayer.GetAdornerLayer() は、パネル内のすべてのコントロールに対して NULL を返します。

于 2014-01-12T10:43:47.580 に答える