несовместимость ресурса Silverlight с VS дизайнером? - PullRequest
3 голосов
/ 04 сентября 2010

В верхней части моего XAML определено следующее:

<controls:ChildWindow 
    x:Class="MyProject.SilverlightUI.Views.CharacterGenerator"
    xmlns:my="clr-namespace:MyProject.SilverlightUI.ViewModels" 
>
<controls:ChildWindow.Resources>
    <my:AlignmentsViewModel x:Key="AlignmentsVM" ></my:AlignmentsViewModel>
    <CollectionViewSource x:Key="AlignmentListViewSource" Source="{Binding Path=Alignments, Source={StaticResource AlignmentsVM}}"></CollectionViewSource>
</controls:ChildWindow.Resources>

Затем я использую AlignmentListViewSource в качестве ItemSource, который я связываю с ComboBox.Кажется, все работает правильно, за исключением того, что Designer не нравится ресурс AlignmentsVM.Он жалуется так:

[Xml_CannotFindFileInXapPackage]
Arguments: ServiceReferences.ClientConfig
Debugging resource strings are unavailable. Often the key and arguments provide sufficient information to diagnose the problem. See [broken hyperlink]
   at System.Xml.XmlXapResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
   at System.Xml.XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext)
   at System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings, XmlParserContext inputContext)
   at System.ServiceModel.Configuration.ServiceModelSectionGroup.GetSectionGroup()

Я проверил, что файл ServiceReferences.ClientConfig является частью проекта SilverlightUI и помечен как «Content».

AlignmentsViewModel вызывает веб-сервис в своем конструкторе, но я почти уверен, что это проблема дизайнера VS, а не класса.Я могу скомпилировать и запустить проект, и он будет работать точно так же, как я хочу от cassini, заполняя поле со списком.это просто дизайнер VS, который не взаимодействует.

Может кто-нибудь посоветовать мне, как заставить дизайнера распознавать тот факт, что ServiceReferences.ClientConfig IS доступен?

1 Ответ

3 голосов
/ 21 октября 2010

Visual Studio Designer фактически вызывает конструктор элемента управления при его отображении. Если вы обращаетесь к ресурсам из конструктора или обработчика события UserControl_Loaded, возникает исключение. Я обошел эти (разумные) ограничения, предоставляя значения сохранения в конструкторе.

Объявление поля

static bool isInDesignMode;

Конструкторская логика

// Check for design mode (the Visual Studio Designer is unable to find the AppSettings.xml)
bool isInDesignMode = DesignerProperties.GetIsInDesignMode(this);

Метод логики

string cultures = isInDesignMode ? "en,de" : ConfigurationManager.AppSettings["supportedCultures"];
...