Почему метод отсутствует в системном объекте в Silverlight? - PullRequest
1 голос
/ 11 августа 2011

Я работаю над проектом Silverlight, и недавно кто-то из моей команды добавил var popups = VisualTreeHelper.GetOpenPopups() к методу в нашем приложении.Когда я получил их код из системы контроля версий, я получил ошибку компиляции, в которой говорилось, что GetOpenPopups не найден на VisualTreeHelper.VisualTreeHelper - это объект, полученный из пространства имен System.Windows.Media, и нет разницы между моим файлом кода (для этого файла) и остальной частью моей команды.В обозревателе объектов я вижу, что в сборке System.Windows в пространстве имен System.Windows.Media метод GetOpenPopups не указан для меня, но для остальной части моей команды.Похоже, что у нас есть разные версии этих сборок, но нет предупреждений о неправильных ссылочных версиях из проекта / решения.

Чего мне здесь не хватает?Почему GetOpenPopups() отсутствует для меня (а не для всей моей команды)?

Ответы [ 3 ]

2 голосов
/ 11 августа 2011

Вы уверены, что ссылаетесь на версию сборки Silverlight? стандартная версия .Net не включает метод , тогда как SL one не включает.

1 голос
/ 12 августа 2011

По догадкам я скачал и установил самую последнюю версию Silverlight SDK (без изменения кода в проекте), и теперь этот метод отображается в VisualTreeHelper. Очевидно, GetOpenPopups - это недавно добавленный метод (по состоянию на Silverlight 4). Я думал, что установил SDK раньше, и мы разрабатывали Silverlight 4 с момента запуска нашего проекта около года назад, поэтому я все еще не понимаю, почему он не был доступен на моей машине. Не было никаких предупреждений или ошибок о том, что версии отличаются от того, что было доступно на моей машине, и того, на что ссылались в нашем проекте. Похоже, мне, возможно, придется прочитать о версиях в сборках .NET, чтобы лучше понять, как это работает, и убедиться, что это не будет проблемой при развертывании. Спасибо за предложения, ребята.

0 голосов
/ 12 августа 2011

Silverlight имеет очень ограниченный набор членов на VisualTreeHelper, и GetOpenPopups не является одним из них. Вопрос в том, почему остальная часть вашей команды видит метод, который не существует?

Один из сценариев может заключаться в том, что файл кода связан с другим проектом WPF проекта, но кто-то забыл защитить этот кусок кода с помощью #if SILVERLIGHT. Выглядит хорошо для них, потому что они работают над проектом WPF.

Урок здесь заключается в том, чтобы сначала проверить онлайн-документы MSDN или просто попробовать, прежде чем ответить.

...