Можно ли показать / скрыть UserControls в XAP-файле Silverlight из JavaScript? - PullRequest
0 голосов
/ 03 ноября 2008

Я создал проект Silverlight, который создает файл [нечто] .xap для упаковки нескольких пользовательских элементов управления Silverlight. Я хотел бы манипулировать этим файлом .xap с помощью javascript в браузере, чтобы показать и скрыть пользовательские элементы управления, основанные на событиях java-скрипта.

Возможно ли это сделать?

Если так, то любой образец может или ссылки на документацию будут оценены.

Заранее спасибо

Kevin

Ответы [ 2 ]

1 голос
/ 03 ноября 2008

Вот мое решение ... не уверен, что это "лучшие практики" ... комментарии ????

В классе App в моем приложении Silverlight у меня есть следующий код:

    private Page _page = null;
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        _page = new Page();
        this.RootVisual = _page;

        HtmlPage.RegisterScriptableObject("App", this);
    }

Также к классу приложения я добавляю [ScriptableMember] для вызова из JavaScript

    [ScriptableMember]
    public void ShowTeamSearch(Guid ctxId, Guid teamId)
    {
        _page.ShowTeamSearcher(ctxId, teamId);
    }

Класс Page является классом по умолчанию, который создается в проекте Silverlight Control, на самом деле он не имеет никакого пользовательского интерфейса или логики, он просто используется для смены представлений.

    Login oLogin;
    TeamSearcher oSearcher;

    public Page()
    {
        InitializeComponent();
        oLogin = new Login();
        oSearcher = new TeamSearcher();

        oLogin.Visibility = Visibility;
        this.LayoutRoot.Children.Add(oLogin);
    }

Также добавлен метод для показа / скрытия представлений ... это может / вероятно станет более продвинутым / устойчивым с анимацией и т. Д. ... но это показывает основную идею:

    public void ShowTeamSearcher(Guid ctxId, Guid teamId)
    {
        oSearcher.UserTeamId = teamId;
        oSearcher.UserContextId = ctxId;

        LayoutRoot.Children.Remove(oLogin);
        LayoutRoot.Children.Add(oSearcher);
    }

Затем, чтобы вызвать это в JavaScript после присвоения идентификатора oXaml экземпляру хоста silverlight.

    var slControl = document.getElementById('oXaml');
    slControl.Content.App.ShowTeamSearch(sessionId, teamId);   

Кажется, это работает и не так уж и плохо с решением, но может быть что-то лучше ... мысли?

0 голосов
/ 03 ноября 2008
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...