親と比較してWPF要素の境界長方を決定する
質問
これは非常に簡単なリクエストだと思いますが、検索で決定的な答えを見つけることができないようです。他の親要素と比較して、ウィンドウ内の特定の視覚要素の境界を決定するにはどうすればよいですか?
使ってみました LayoutInformation.GetLayoutSlot
しかし、これはただ戻っているようです Rect
0.0で、要素の実際の位置を反映していません。
私がやろうとしているのは、ウィンドウの「スクリーンショット」を使用することです RenderTargetBitmap
そして、それを特定の要素にトリミングしますが、ビットマップに何をトリミングするかを知るために要素の範囲を取得することはできません!
解決
それは非常に簡単です:
public static Rect BoundsRelativeTo(this FrameworkElement element,
Visual relativeTo)
{
return
element.TransformToVisual(relativeTo)
.TransformBounds(LayoutInformation.GetLayoutSlot(element));
}
実際、それを別の方法に入れるのはやり過ぎかもしれません。
他のヒント
レイアウトスロットオプションはまったく機能しませんでした。これにより、指定された親/祖先のコントロールに比べて子供の位置を与えてくれました。
public static Rect BoundsRelativeTo(this FrameworkElement child, Visual parent)
{
GeneralTransform gt = child.TransformToAncestor(parent);
return gt.TransformBounds(new Rect(0, 0, child.ActualWidth, child.ActualHeight));
}
気にしないで、私はついにの組み合わせを使ってそれを理解することができました LayoutInformation.GetLayoutSlot()
(おそらく私はどちらかを使用できたでしょう ActualWidth
/ActualHeight
また RenderSize
) と UIElement.TranslatePoint()
.
これと同じくらい単純な場合は、かなり複雑な解決策のようです。
myElement.GetBounds( relativeElement );
しかたがない。拡張方法の時間かもしれません。 :)
ここで見つけたいくつかの提案を考慮して、これが私にとって問題を解決しました。
item.TransformToVisual( relativeToElement )
.TransformBounds( new Rect( item.RenderSize ) );
所属していません StackOverflow