【问题标题】:Is it possible to show/hide UserControls within a Silverlight XAP file from JavaScript?是否可以通过 JavaScript 在 Silverlight XAP 文件中显示/隐藏用户控件?
【发布时间】:2008-11-04 00:19:58
【问题描述】:

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

可以这样做吗?

如果有任何示例或文档链接将不胜感激。

提前致谢

凯文

【问题讨论】:

    标签: silverlight


    【解决方案1】:

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

    在我的 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 类中添加了一个 [ScriptableMember] 以从 JavaScript 调用

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

    这似乎行得通,并不是一个糟糕的解决方案,但可能有更好的方法......想法?

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 谢谢 Arron,但除非我错过了,否则所提供的文档主要集中在 SL 和 Javascript 之间的互操作上......一旦我回到托管世界,我就很感兴趣,我该怎么做一个 UserControl 并隐藏它,然后显示另一个。分配给 RootVisual 属性无效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多