Добавление элементов управления приводит к зависанию Silverlight - PullRequest
0 голосов
/ 28 декабря 2010

У меня очень странная проблема, которую мне очень сложно отлаживать, поэтому я снова обращаюсь к SO-сообществу. : -)

Сначала немного о моей настройке (заметьте! Я новичок в Silverlight, просто учусь на собственном опыте, поэтому вся моя предпосылка может быть неправильной!):

У меня есть несколько корневых узлов (форм), под которыми есть несколько листов (вопросов). Теперь я просто хочу показать / скрыть вопросы в зависимости от того, какая форма выбрана в настоящее время - довольно просто.

Я делаю следующее:

  • В LayoutControl добавлено несколько элементов управления (я использую компоненты DeveloperExpress)
  • При выборе другой формы созданные элементы управления сохраняются в списке на ранее выбранной форме
  • Когда вы выбираете форму, список элементов управления перебирается, и каждый элемент снова добавляется в мой layoutcontrol

Когда я сохраняю элементы в списке в форме, я сначала проверяю .Remove () их родительских элементов, чтобы убедиться, что с этим нет проблем.

И это работает.

Если у меня есть 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 голосов
/ 02 января 2011

Чтобы в полной мере использовать Silverlight, вы должны попытаться использовать XAML для разметки дизайна. Если вы хотите составить список вопросов, используйте e Listbox или ItemsControl. Затем вы можете оформить каждый элемент в списке так, чтобы он выглядел «правильно». Если вы привязываете список к ObservableCollection, вы просто добавляете или удаляете его в списке, и графический интерфейс будет обновляться в соответствии с тем, что в вашем списке.

Взгляните на MVVM, который действительно хорошо работает с Silverlight.

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