Почему происходит сбой Visual Studio 2010 при добавлении привязки к TextBlock? - PullRequest
1 голос
/ 03 марта 2011

Когда я меняю свой код с:

<TextBlock x:Name="HeaderText" Style="{StaticResource HeaderTextStyle}" 
           Text="My Page Header"/>

до:

<TextBlock x:Name="HeaderText" Style="{StaticResource HeaderTextStyle}" 
           Text="{Binding Path=ModuleStrings.Package_Name, Source={StaticResource ResourceWrapper}}"/>

Каждый раз! Если я изменяю его вне среды IDE, происходит сбой при загрузке файла.

Контекст:

Я использую Visual Studio 2010 и .Net 4.0. Я пишу приложение Silverlight, используя шаблон бизнес-приложения Silverlight. У меня есть несколько модулей, которые я открываю, используя MEF и загружая их динамически. Этот код существует в библиотеке классов Silverlight RIA Services, которую я использую в качестве модуля.

enter image description here

Edit:

Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: devenv.exe
  Application Version:  10.0.30319.1
  Application Timestamp:    4ba1fab3
  Fault Module Name:    unknown
  Fault Module Version: 0.0.0.0
  Fault Module Timestamp:   00000000
  Exception Code:   c00000fd
  Exception Offset: 0fd84cf0
  OS Version:   6.1.7600.2.0.0.256.1
  Locale ID:    1033

Additional information about the problem:
  LCID: 1033

1 Ответ

1 голос
/ 10 июня 2011

Чтобы обеспечить предварительный просмотр пользовательского интерфейса, редактор XAML фактически выполняет кодирование вашего привязанного получателя в пределах VS2010. Если ваш метод получения зависит от других программных компонентов, которые неправильно инициализированы из-за того, что приложение на самом деле не запущено, ваш метод получения может вызвать исключение.

Обычно VS2010 показывает это исключение вместе со своей трассировкой стека в желтой строке заголовка над конструктором пользовательского интерфейса. Во многих случаях VS2010 кажется не в состоянии справиться с этим исключением, в результате чего вся среда IDE падает.

Мой подход в этих случаях заключается в том, чтобы окружить всю кодировку геттера (в вашем примере ResourceWrapper.ModuleStrings.Package_Name) с помощью try / catch и показать исключение через MessageBox.Show (). Таким образом, вы по крайней мере сможете увидеть первоначальную причину ошибки после восстановления. (Существует также возможность отладки самой VS со вторым экземпляром IDE ...)

Затем, когда я обнаружил ошибку, в большинстве случаев это помогает исключить некоторое кодирование во время разработки (т. Е. При работе в редакторе XAML, а не в приложении)

// Detect if this coding is run by the IDE or within an actual application
bool inDesignMode = (bool) DesignerProperties.IsInDesignModeProperty.GetMetadata( typeof(DependencyObject) ).DefaultValue;

if(!inDesignMode)
{
    // ... We are running as application ...
}

НТН

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