【问题标题】:Adding controls causes silverlight to hang添加控件会导致 Silverlight 挂起
【发布时间】:2010-12-28 09:03:09
【问题描述】:

我有一个非常奇怪的问题,我发现它非常难以调试,因此我再次求助于 SO 社区。 :-)

首先介绍一下我的设置(注意!我是 silverlight 新手,只是边做边学,所以我的整个前提可能是错误的!):

我有一些根节点(表格),下面是一些叶子(问题)。 现在,我只想根据当前选择的表单显示/隐藏问题 - 相当简单。

我执行以下操作:

  • 向 LayoutControl 添加了许多控件(我使用的是 DeveloperExpress 组件)
  • 当您选择另一个表单时,创建的控件将保存在先前选择的表单上的列表中
  • 当你选择一个表单时,控件列表会被遍历,每个元素都会再次添加到我的布局控件中

当我将列表中的元素保存在表单上时,我确保首先将它们从其父级中删除()以确保没有问题。

而且,这行得通。

如果我有 1 个或控件。

如果我有更多,一切都照常添加,不会引发异常 - 但 Silverlight 显然会以某种方式进行无限循环?无论我在 IE 或 Chrome 中运行它,它都会让浏览器崩溃! (或者,我猜是浏览器插件)。

我尝试在此期间暂停调试器以查看问题出在哪里,但它只是在“外部代码”中停止。 我认为代码示例不会有多大用处,但这里有两种保存和加载元素的方法:(注意:AddControl 是我定义的一种方法 - 它将元素包装在另一个控件中以提供一些功能. 同样,.MyChildren 使用 .Remove() 从包装器中删除控件并返回它)

    private void LoadElementsFromCurrentForm()
    {
        foreach (var child in _currentForm.Elements)
        {
            layoutControl1.AddControl(child);
        }
    }

    private void SetElementsOnCurrentForm()
    {
        _currentForm.Elements.Clear();
        foreach (var child in layoutControl1.MyChildren)
        {
            _currentForm.Elements.Add(child);
        }
    }

我怎么去调试这个!? 我不知道这是否重要,但所有这些控件都有一个唯一的名称。

问候

索伦

【问题讨论】:

    标签: silverlight silverlight-4.0 user-controls devexpress


    【解决方案1】:

    要充分利用 Silverlight,您应该尝试使用 XAML 进行设计标记。 如果您想制作问题列表,请使用 e Listbox 或 ItemsControl。 然后,您可以将列表中的每个项目设置为“看起来正确”。 如果您将列表框绑定到 ObservableCollection,您只需在列表中添加或删除,gui 将根据列表中的内容进行更新。

    看看 MVVM,它与 Silverlight 配合得非常好。

    【讨论】:

    • 感谢您的建议!不幸的是,我不能简单地绑定到一个可观察的集合。控件放置在我无权访问的容器中,并且允许对控件进行拖放重新排序,我需要保留这些控件。不过,非常感谢您的提示 - 我会研究 MVVM。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多