Я меняю пользовательские элементы управления в главном окне, используя связанное свойство элемента управления содержимым.
XMAL:
<ContentControl Grid.Row="0" Content="{Binding MainContent, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"></ContentControl>
ИМУЩЕСТВО:
private UserControl _mainContent;
public UserControl MainContent
{
get
{
return _mainContent;
}
set
{
_mainContent = value;
OnPropertyChanged();
}
}
КОД ЗА:
MainContent = new TestUserControl();
В СОБСТВЕННОСТИ ИЗМЕНЕНО:
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
protected virtual void OnPropertyChanged()
{
string propertyName = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod().Name.Substring(4);
OnPropertyChanged(propertyName);
}
Моя проблема заключается в том, что на одной конкретной тестовой машине (похожей на другие, в ней нет ничего уникального или странного. Windows 7, 4 ГБ оперативной памяти и т. Д.) При изменении пользовательских элементов управления с использованием этого механизма приложение зависает.
Глядя на мои журналы, получена команда «Изменить», создается новый пользовательский элемент управления, запускается конструктор. Установлено свойство основного содержимого, запускается событие OnPropertyChanged.
а потом ничего. Приложение зависает, и Windows сообщает, что не отвечает, и закрывает приложение.
Событие OnLoaded пользовательского элемента управления никогда не запускается.
Это происходит при загрузке любого пользовательского элемента управления таким образом на конкретную машину.
Идеи, комментарии приветствуются. Приветствуются идеи, как это отладить.
ОБНОВЛЕНИЕ: поскольку это тестовая машина, она не очень часто перезагружается.
Как только мы перезагрузили машину, проблема исчезла. Я все еще хотел бы знать, почему и как это предотвратить снова.
PS. Целевая платформа - x86, а проблемная машина - x64, но в другом окне 7 x64 проблем не было. Мы используем .net framework 4.0