添加控件会导致Silverlight挂起

时间:2010-12-28 09:03:09

标签: silverlight silverlight-4.0 user-controls devexpress

我有一个非常奇怪的问题,我发现调试非常困难,因此我再次转向SO社区。 : - )

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

我有一些根节点(表单),其中有一些叶子(问题)。 现在,我只是想显示/隐藏问题,具体取决于当前选择的形式 - 相当容易。

我执行以下操作:

  • 许多控件都添加到LayoutControl(我正在使用DeveloperExpress组件)
  • 当您选择其他表单时,创建的控件将保存在先前选定表单的列表中
  • 当您选择一个表单时,将遍历控件列表,并且每个元素都会再次添加到我的layoutcontrol中

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

而且,这很有效。

如果我有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);
        }
    }

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

此致

索伦

1 个答案:

答案 0 :(得分:0)

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

看一下MVVM,它对Silverlight非常有用。