Silverlight, размещенная в Winforms

После расследования я считаю, что каждый раз, когда я удаляю приложение и переустанавливаю заново, пропускаю шаг входа в систему, и он создает еще один сопоставленный userId - deviceId на странице «Устройства» в консоли приложения MFP.

Кто-нибудь сталкивался с этой проблемой?

11
задан NotDan 13 October 2008 в 17:34
поделиться

4 ответа

Я думаю с помощью управления Windows Forms WebBrowser, лучший выбор. Чтобы сделать это, Вам будет нужно Ваше приложение Silverlight на веб-странице, затем Вы указываете на свой WebBrowser на URI страницы.

Чтобы помешать Вашему управлению WebBrowser действовать как IE, я рекомендовал бы установить следующее:

webBrowser.AllowNavigation = false;
webBrowser.AllowWebBrowserDrop = false;
webBrowser.IsWebBrowserContextMenuEnabled = false;
webBrowser.WebBrowserShortcutsEnabled = false;

Вызывающие методы для Вашей формы из Silverlight достаточно легко сделать. Для запуска Вам нужен класс, который имеет все методы, которые Вы хотите назвать от Silverlight. Можно использовать форму саму или другой объект, но необходимо отметить класс с [ComVisible (верный)] атрибут. Затем Вы присваиваете свой объект WebBrowser. Свойство ObjectForScripting. Это выставляет Ваш объект как "window.external" на веб-странице.

[ComVisible(true)]
public partial class Form1 : Form
{
    ......
    webBrowser.ObjectForScripting = this;
    ......
    public void CallMeInForm(string something)
    {
        MessageBox.Show("Silverlight said: " + something);
    }
}

Вот именно для внутренней части Ваш проект Windows Forms. В Вашем приложении Silverlight, необходимо взять этот ObjectForScripting и вызвать методы на него. Для вызова метода в моем примере выше используйте следующие строки:

using System.Windows.Browser;
......
ScriptObject myForm = (ScriptObject)HtmlPage.Window.GetProperty("external");
myForm.Invoke("CallMeInForm", "testing 1 2 3");

Команда Invoke позволяет Вам передать любое число и тип параметров к Вашей функции, хотя я подозреваю, что это не хотело бы его очень, при попытке раздать сложные типы данных. Но если бы необходимо было сделать так, то Вы могли бы всегда использовать сериализацию.

Вызывание функций Silverlight от Вашей формы, кажется, tricker направление. Я полностью еще не понял этого.

В Вашем приложении Silverlight Вы также выставляете функции веб-странице. Чтобы сделать это, используйте HtmlPage. RegisterScriptableObject () функция. Снова, можно передать в любом классе с методами, которые Вы хотите выставить. Чтобы метод был выставлен, тем не менее, необходимо отметить его с [ScriptableMember] атрибут.

HtmlPage.RegisterScriptableObject("Page", this);
......
[ScriptableMember]
public void CallMeInSilverlight(string message)
{
    HtmlPage.Window.Alert("The form said: " + message);
}

На данном этапе Ваш метод выставляется JavaScript на странице, и Вы могли назвать его как так, предположив, что Вы добавили id="silverlightControl" к Вашему <object> элемент:

document.getElementById('silverlightControl').Content.Page.CallMeInSilverlight("testing 1 2 3");

Заметьте Page свойство? Это что вызов к RegisterScriptableObject() дал нам. Теперь, давайте перенесем это в опрятный метод JavaScript:

<script type="text/javascript">
    function CallMe(message) {
        var control = document.getElementById('silverlightControl');
        control.Content.Page.CallMeInSilverlight(message);
    }
</script>

И теперь мы можем звонить CallMe() метод из приложения Windows Forms как так:

public void CallToSilverlight()
{
    webBrowser.InvokeScript("CallMe", new object[] { "testing 1 2 3" });
}
15
ответ дан 3 December 2019 в 07:14
поделиться

Взгляните на Desklighter. Не точно, что Вы ищете, но это действительно проверяет это, это должно быть возможно?

1
ответ дан 3 December 2019 в 07:14
поделиться

Silverlight в приложении winform просто походит на плохие новости. Это означало бы, что Вы работаете к другому CLR в отдельном приложении и должны были бы иметь дело с большой добавленной сложностью, чтобы заставить его работать. Если возможно рассмотрите использование полного WPF в рамках своего приложения вместо этого, вот ссылка, показывающая Вам как.

0
ответ дан 3 December 2019 в 07:14
поделиться

Если все, что вам действительно нужно сделать, это разместить Silverlight в настольном приложении, я бы посоветовал вам ознакомиться с проектом Джереми Моррилла SilverlightViewport . Он позволяет встраивать приложение Silverlight в приложение WPF или XNA. Это все еще альфа-версия, но вы можете найти ее полезной.

Вот картинка, чтобы подогреть ваш аппетит:

http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=silverlightviewport&DownloadId=97946

1
ответ дан 3 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: