Bir winform tarayıcısı üzerinden winform'larda bir silverlight kontrolüne ev sahipliği yapmak isterim, ancak çalışabilmesi için formların gümüş ışığıyla ve bir şekilde diğerleriyle konuşmasının bir yoluna ihtiyacım var. Bir şekilde her ikisinin birbiriyle etkileşime girmesi mümkün mü? Örneğin, formu tarayıcının javascriptiyle konuşturun ve bunu silverlight kontrolüyle konuşturun mu? Daha iyi bir yolu var mı? Ya da bir şekilde bile? (kodu silverlight ve wpf olarak derlemekten başka)Winlight'lar içinde barındırılan Silverlight
cevap
Windows Forms WebBrowser denetimini kullanmanın en iyi yol olduğunu düşünüyorum. Bunu yapmak için bir web sayfasında Silverlight uygulamasına ihtiyacınız olacak, ardından WebBrowser'ınızı sayfanın URI'sine yönlendireceksiniz.
IE gibi davranan adresinin WebBrowser denetimi tutmak için, aşağıdaki ayarı öneriyoruz: Silverlight yapmak için yeterli kolaydır içinden formunuzdawebBrowser.AllowNavigation = false;
webBrowser.AllowWebBrowserDrop = false;
webBrowser.IsWebBrowserContextMenuEnabled = false;
webBrowser.WebBrowserShortcutsEnabled = false;
çağrılması yöntemleri. Başlamak için, Silverlight'tan aramak istediğiniz tüm yöntemlere sahip bir sınıfa ihtiyacınız var. Formunuzu veya başka bir nesneyi kullanabilirsiniz, ancak sınıfı [ComVisible (true)] özniteliğiyle işaretlemeniz gerekir. Sonra nesneyi WebBrowser.ObjectForScripting özelliğine atarsınız. Bu, nesneyi web sayfasında "window.external" olarak gösterir.
[ComVisible(true)]
public partial class Form1 : Form
{
......
webBrowser.ObjectForScripting = this;
......
public void CallMeInForm(string something)
{
MessageBox.Show("Silverlight said: " + something);
}
}
Bu, Windows Forms projenizin içinde yer almaktadır. Silverlight uygulamanızın içinde, bu ObjectForScripting'i almanız ve üzerinde yöntemleri çağırmanız gerekir. Yukarıda benim örnekte yöntemini çağırmak için aşağıdaki satırları kullanın:
çağırır komut buna çok eğer istemem şüpheli olsa da, işlevinize herhangi bir sayıda parametre ve türünü geçmesine izin verirusing System.Windows.Browser;
......
ScriptObject myForm = (ScriptObject)HtmlPage.Window.GetProperty("external");
myForm.Invoke("CallMeInForm", "testing 1 2 3");
karmaşık veri türlerini geçmeyi deneyin. Fakat bunu yapmanız gerekirse, her zaman serileştirme kullanabilirsiniz.
Silverlight işlevlerini çağırmak formunuzdan tricker yönü gibi görünüyor. Bunu henüz tam olarak anlamadım.
Silverlight uygulamanızda, işlevleri web sayfasına da yansıtırsınız. Bunu yapmak için HtmlPage.RegisterScriptableObject() işlevini kullanın. Yine, ortaya çıkarmak istediğiniz yöntemlerle herhangi bir sınıfa geçebilirsiniz. Ancak, bir yöntemin açıkta kalması için, [ScriptableMember] özniteliğiyle işaretlemeniz gerekir.
Bu noktadaHtmlPage.RegisterScriptableObject("Page", this);
......
[ScriptableMember]
public void CallMeInSilverlight(string message)
{
HtmlPage.Window.Alert("The form said: " + message);
}
, senin yöntem sayfasındaki JavaScript maruz ve size <object>
elemana id="silverlightControl"
eklendi varsayarak şöyle diyebiliriz:
document.getElementById('silverlightControl').Content.Page.CallMeInSilverlight("testing 1 2 3");
Bildirimi Page
mülkiyet? RegisterScriptableObject()
numaralı telefon bizi aradı.Şimdi, bir düzenli JavaScript yöntem haline sar bakalım:
<script type="text/javascript">
function CallMe(message) {
var control = document.getElementById('silverlightControl');
control.Content.Page.CallMeInSilverlight(message);
}
</script>
Ve şimdi Windows'tan CallMe()
yöntemini çağırabilirsiniz şöyle Forms uygulaması:
public void CallToSilverlight()
{
webBrowser.InvokeScript("CallMe", new object[] { "testing 1 2 3" });
}
Bir winform uygulamasında Silverlight, kötü haberlere benziyor. Bu, tek bir uygulamada farklı CLR'lere koştuğunuz anlamına gelir ve çalışmasını sağlamak için ek karmaşıklıklarla uğraşmak zorunda kalır. Mümkünse, uygulamanızın içinde tam WPF'yi kullanmayı düşünün. Bunun yerine, size nasıl gösterileceğini gösteren bir link.
Silverlight tarafından kullanılan CoreCLR diğer CLRS ile işlemde çalışan bu senaryoyu desteklediği için, bu bir sorun değil:
İşte iştahınızı ıslak bir resim. –
İlginç, paylaşım için teşekkürler. Bunu yapabilmenize rağmen, bunu yapmanın tavsiye edilmeyebileceğini vurgulamaya çalışıyordum. Teknolojiyi, iradenize doğru bükmenin düzgün bir yolu. – smaclell
Umm ... CoreCLR, istemci üzerinde çalışıyor olacak. Sunucuda çalışmıyor mu? – AnthonyWJones
Desklighter'a bakın. Tam olarak aradığınız şey değil ama mümkün olması gerektiği kanıtı var mı?
Eğer gerçekten tüm yapmanız gereken bir masaüstü uygulamasında Silverlight'ı barındırıyorsa, Jeremiah Morrill'un SilverlightViewport projesini kontrol etmenizi öneririm. Bir WPF veya XNA uygulamasında bir Silverlight uygulaması yerleştirmenize izin verir. Hala çok alfa ama bunu faydalı bulabilirsin.
- 1. byte [] to Silverlight içinde BitmapImage
- 2. Silverlight
- 3. Yeni SEKME (Silverlight) içinde URI'yi açın
- 4. Silverlight
- 5. Silverlight Uygulaması?
- 6. Bir Silverlight uygulamasında IIS tarafından barındırılan bir web hizmeti nasıl hata ayıklanır?
- 7. UI'mı Silverlight
- 8. işlenmeyen İstisna - Silverlight 4.0
- 9. Silverlight SecurityException
- 10. Silverlight Dağıtımı
- 11. Silverlight, HyperlinkButton
- 12. Silverlight: BitmapImage to WriteableBitmap
- 13. Google CDN'de barındırılan jquery.cookies nedir?
- 14. Çoklu WCF Hizmetleri (kendiliğinden barındırılan)
- 15. GraphHopper: kendi kendine barındırılan sunucunun
- 16. sarma Metin ve Köprüler Silverlight
- 17. Barındırılan NumericUpDown'ı mevcut ToolStripRenderer'ı kullanarak nasıl boyayabilirim?
- 18. Silverlight 5 aksamı bir Silverlight 4 aksamına başvurabilir mi?
- 19. Silverlight animasyonu düzgün değil
- 20. Silverlight Uygulamasını WPF'ye Dönüştürme
- 21. Silverlight Control Lifecycle
- 22. ContextMenuService Silverlight 4'te
- 23. Yalnızca Düğmelerle Silverlight Scrollviewer
- 24. Silverlight Uygulamaları - Nasıl güncellenir?
- 25. Silverlight için kronometre?
- 26. Silverlight ad alanı kullanamazsınız
- 27. Silverlight 4 PLINQ
- 28. Silverlight MediaElement Cloud
- 29. Silverlight IP adresi
- 30. Silverlight ses bileşenleri
Bu harika! WebBrowser'dan WinForm'a nasıl çalışacağını anlayabilirsiniz. Bunu web'de başka kimseyi görmedim (ya da denedim ...), eğer bunu anlayabilirseniz harika olur. – NotDan
, ev sahibi formdan Silverlight'ı nasıl arayacağınızı anladınız mı? – Shrike