2009-04-24 7 views
0

ich dabei bin. Die Art und Weise, wie Sie dies tun, besteht natürlich darin, das fragliche HTML-Element über Ihre Silverlight-Instanz zu positionieren, wie z. B. here. Das Problem ist, dass, wenn ich die GeneralTransform.Transform() -Methode verwende, um die absoluten Koordinaten meines Steuerelements zu erhalten, so dass ich das HTML-Element korrekt positionieren kann, hat das zurückgegebene Point-Objekt immer .X = 0 und .Y = 0.TransformToVisual in Silverlight Verwendung von HTML zu positionieren Elementen

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()); 
} 

Ich habe nicht in der Lage gewesen, große Dokumentation über die GeneralTransform.Transform() Methode zu finden, aber es scheint wie ich es richtig bin mit. Irgendwelche Gedanken darüber, was ich falsch mache?

bearbeiten 4/28/09: Ich habe immer noch keine Antwort, aber ich bin mit der Transform() Methode richtig gefunden. Das Problem tritt nur auf, wenn ich die InitControl() -Methode während des Page.Loaded-Ereignisses aufruft. Wenn ich ein paar Sekunden warte und dann (sagen wir) von einem Button_Click-Ereignis ausgeht, funktioniert derselbe Code einwandfrei. Gemäß den SL-Dokumenten sollte alles zu dem Zeitpunkt, zu dem das Page.Loaded-Ereignis ausgelöst wird, angemessen angeordnet sein, aber das ist eindeutig nicht der Fall.

Ich sollte auch beachten, dass jeder einmal in eine Weile, den obigen Code perfekt funktioniert gut, auch wenn es aus dem Page.Loaded Ereignis aufgerufen wird. Huh.

Meine Abhilfe so weit, für das, was es wert ist, ist die Steuerung für ein paar Sekunden, nachdem das Formular geladen verstecken, dann zeigen. Es ist ein hässlicher Hack, aber es sei denn, jemand hat bessere Ideen ...?

Antwort

0

Dies ist auf RootVisual eine Achse mit 0,0 x/y. Versuchen Sie, das nächste Element in der Struktur zu verwenden, normalerweise ist es standardmäßig layoutRoot (vorausgesetzt, Sie haben seinen Namen nicht geändert usw.). Verwenden Sie FindName(), um sicherzustellen, dass Sie eine direkte Referenz auf die Ebene haben, auf der Sie den iFrame positionieren möchten.

Scott Barnes/Rich-Plattformen Product Manager/Microsoft.

+0

Danke, Scott. Übrigens, wenn MS möglicherweise (bitte, bitte, bitte) Webcam-Unterstützung in SL 3.0 bekommen könnte, wäre dieses unangenehme Bit von SL -> JS -> Flash-Interaktion nicht notwendig. Was können Sie dabei für uns tun? –

+0

Es ist definitiv eine unserer Funktionen req Liste. Wir planen gerade SL4, also werde ich sicherstellen, dass es laut und deutlich wiedergegeben wird! :) –

Verwandte Themen