Flashインスタンスを「ホストする」Silverlightカスタムコントロールを開発中です。もちろん、これを行う方法は、例えば、hereのように、問題のHTML要素をSilverlightインスタンスに配置することです。私が実行している問題は、HTML要素を正しく配置できるように、GeneralTransform.Transform()メソッドを使用してコントロールの絶対座標を取得すると、返されるPointオブジェクトは常に.X = 0であり、 .Y = 0。SilverlightでTransformToVisualを使用してHTML要素を配置する
public void InitControl(string id)
{
GeneralTransform gt = this.TransformToVisual(Application.Current.RootVisual);
Point localPos = gt.Transform(new Point(_htmlControlLeft, _htmlControlTop));
// Create the containing DIV tag.
HtmlDocument doc = HtmlPage.Document;
divHost = doc.CreateElement("div");
divHost.SetAttribute("id", System.Guid.NewGuid().ToString());
divHost.SetStyleAttribute("position", "absolute");
divHost.SetStyleAttribute("left", localPos.X.ToString() + "px"); // always 0
divHost.SetStyleAttribute("top", localPos.Y.ToString() + "px"); // always 0
Debug.WriteLine("x,y=" + localPos.X.ToString() + "," + localPos.Y.ToString());
divHost.SetStyleAttribute("width", Width.ToString() + "px");
divHost.SetStyleAttribute("height", Height.ToString() + "px");
divHost.SetStyleAttribute("z-index", _htmlZIndex.ToString());
}
私はGeneralTransform.Transform()メソッドに大きなドキュメントを見つけることができませんでしたが、私はそれを正しく使用しているようにそれはです。私が間違ってやっていることに関する考えは?
編集4/28/09:まだ回答が見つかりませんでしたが、Transform()メソッドを正しく使用しています。この問題は、Page.Loadedイベント中にInitControl()メソッドを呼び出すと表示されます。数秒待ってからButton_Clickイベントから呼び出すと、同じコードがうまく動作します。 SLドキュメントによると、Page.Loadedイベントが発生するまでにすべてが適切にレイアウトされている必要がありますが、そうでないことは明らかです。
PageRoadedイベントから呼び出されても、上のコードは一度も完全にうまく動作することに注意してください。ハァッ。
これまでのところ、私の回避策は、フォームが読み込まれてから数秒間コントロールを非表示にして表示することです。それは醜いハックですが、誰にも良いアイデアがない限り...?
ありがとう、スコット。ところで、もしMSがSL 3.0へのウェブカメラのサポートを受ける可能性があるなら(可能であれば)、この厄介なSL - > JS - > Flashインタラクションは必要ないだろう。あなたが私たちのためにできることは何ですか? –
私たちの機能要件リストの1つです。私たちは現時点でSL4の計画を立てているので、大声で明瞭にエコーされるようにします! :) –