是否可以在JavaScript中的Silverlight XAP文件中显示/隐藏UserControl?

时间:2008-11-03 14:36:28

标签: silverlight

我创建了一个Silverlight项目,它生成[something] .xap文件来打包一些Silverlight UserControls。我想通过在浏览器中使用javascript来操作.xap文件,以显示和隐藏基于java脚本事件的用户控件。

是否可以这样做?

如果是这样,任何样本都可以或文档链接将被赞赏。

提前致谢

凯文

2 个答案:

答案 0 :(得分:1)

这是我的解决方案......不确定这是否是“最佳实践”方式...评论????

在我的Silverlight应用程序的App类中,我有以下代码:

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

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

同样在App类中,我添加了一个从JavaScript调用的[ScriptableMember]

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

Page类是在Silverlight Control项目中创建的默认类,它实际上没有任何UI或逻辑,它只用于交换视图。

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

然后在将oXaml的id分配给silverlight主机的实例后,在JavaScript中调用它。

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

这似乎有效,而且解决方案并不是那么糟糕,但可能有更好的东西......想法?

答案 1 :(得分:0)