1

次のコード行を使用して、TransformToVisualメソッドを介してユーザーコントロールの位置を取得しようとしています。

this.TransformToVisual(ParentElement).Transform(new Point());

コントロールがXAMLで定義されている場合、座標は問題ありません。しかし今、私はこのように動的にコントロールを定義したいと思います:

stackPanel.Children.Add(new Control());

座標がシフトされ、TransformToVisualメソッドはマージンを無視して整列します(スタックパネルの左上隅を返します)。

XAML階層は次のとおりです。

<Grid x:Name="ParentElement">
    <StackPanel>
        <StackPanel>
            <Border>
                <StackPanel>
                    <TextBlock  />
                    <StackPanel x:Name="stackPanel" />
                </StackPanel>
            </Border>
        </StackPanel>
    </StackPanel>
</Grid>

だから私の質問は:座標を再び正しく取得する方法はありますか?

ありがとう、kwitee

4

2 に答える 2

1

私は自分で問題を修正することができました:

TransformToVisual() を呼び出す前に UpdateLayout() メソッドを呼び出すと、座標が悪くなくなりました。ActualWidth および height プロパティには、ゼロとして返されるその他の小さな問題がありました。Dispatcher.BeginInvokeデリゲートでこれらのプロパティを呼び出すことで修正しました。

于 2012-06-06T05:54:54.197 に答える