Генерация Silverlight XamlReader завершает с ошибкой System.Type - PullRequest
1 голос
/ 05 марта 2012

У меня есть вызов этого метода:

        public DataTemplate Create(Type type, string propertyName)
    {
        string str = @"<DataTemplate xmlns=""http://schemas.microsoft.com/client/2007"" xmlns:local=""clr-namespace:MyProjectName;assembly:MyProjectName""><StackPanel Orientation=""Horizontal""><TextBlock Text=""{Binding propertyLabel}"" FontStyle=""Italic"" Width=""120"" /><TextBox Text=""{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=local:MainPage}, Path=DataContext.Value1}"" Width=""120"" /></StackPanel></DataTemplate>";
        DataTemplate _dt =  (DataTemplate)XamlReader.Load(str);

        return _dt;
    }

При вызове этого я получаю следующую ошибку: Строка: 56 Ошибка: необработанная ошибка в приложении Silverlight Код: 2512
Категория: ParserError
Сообщение: Не удалось создать 'System.Type' из текста 'local: MainPage'.
Файл:
Строка: 1
Позиция: 253

Сценарий таков:

Сетка -> DataContext = ViewModel ListBox -> ItemsSource = ViewModel.MyCollection ListBoxItem -> DataTemaplate содержит {ViewModel.MyCollection.propertyLabel и ViewModel.Value1}

Что происходит?Почему я получаю эту ошибку?Любые идеи очень приветствуются.

Спасибо.

1 Ответ

1 голос
/ 05 апреля 2012

Я также не смог обойти эту проблему, используя объявление пространства имен clr-namespace: ....Мне нужно было объявить сопоставление определения xml в моем коде с помощью атрибута XmlnsDefintionAttribute.Удобное место для размещения этого атрибута находится в AssemblyInfo.cs.Не помещайте его в блок пространства имен.

[assembly: XmlnsDefinition(
  "http://www.yourcompany.com/yourproduct/yourcomponent", 
  "MyProductName")] // substitute with your own namespace

Затем вам нужно заменить пространство имен clr URL-адресом в атрибуте XML «xmlns: local» (3-я строка в примере ниже)

string str = @"<DataTemplate 
  xmlns=""http://schemas.microsoft.com/client/2007"" 
  xmlns:local=""http://www.yourcompany.com/yourproduct/yourcomponent"">
  <StackPanel Orientation=""Horizontal"">
    <TextBlock Text=""{Binding propertyLabel}"" FontStyle=""Italic"" Width=""120"" />
      <TextBox 
        Text=""{Binding DataContext.Value1
          RelativeSource={RelativeSource FindAncestor, AncestorType=local:MainPage} }"" 
        Width=""120"" />
  </StackPanel>
</DataTemplate>";
...