他の人たちは、いつものように誰もが怒った質問に答えなかったが、その必要性を満たしている。境界の決定が必要なシナリオはいくつでも考えられます。たとえば、HTMLを表示するには、ホストのHTMLページにIFRAMEを使用し、パネルのレンダリングされた境界に従って配置することができれば、UIにうまく統合できます。
ポイント(0,0)のルート座標系に対するGeneralTransformを使用して、コントロールの起点を特定できます。また、ActualHeightとActualWidthは直接浮上します。このコードは、その作業アプリケーションから持ち上げられる - Iは、形質転換(-1、-1)及びIFRAMEの周りに1つの画素の境界領域を補償するために、高さと幅の両方に2を追加した上記のサンプルにおいて
GeneralTransform gt =
TransformToVisual(Application.Current.RootVisual as UIElement);
Point offset = gt.Transform(new Point(-1, -1));
myFrame.SetStyleAttribute("width", (ActualWidth + 2).ToString());
myFrame.SetStyleAttribute("height", (ActualHeight + 2).ToString());
myFrame.SetStyleAttribute("left", offset.X.ToString());
myFrame.SetStyleAttribute("top", offset.Y.ToString());
myFrame.SetStyleAttribute("visibility", "visible");
ブラウザがホストされているときにIFRAMEを使用して埋め込みHTMLを表示します。
また、ネコをスキンするヒットテストには、面白いVisualTreeHelperがあるかもしれません。
IEnumerable<UIElement> VisualTreeHelper
.FindElementsInHostCoordinates(Point intersectingPoint, UIElement subtree)
これは、ポイント(通常はマウスから)の下にあるすべてのUIElementを返します。代わりにRectを使用するオーバーロードがあります。
ありがとう - 私はそのプロパティをどうにか見逃しました。 – Ken