生成datatemplate的Silverlight XamlReader以System.Type错误结束

时间:2012-03-05 18:04:49

标签: silverlight xaml silverlight-5.0

我有这个方法调用:

        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
消息:无法从文本“local:MainPage”创建“System.Type” 文件:
行:1
位置:253

情景是这样的:

网格 - &gt; DataContext = ViewModel ListBox - &gt; ItemsSource = ViewModel.MyCollection ListBoxItem - &gt; DataTemaplate包含{ViewModel.MyCollection.propertyLabel和ViewModel.Value1}

发生了什么事?为什么我会收到此错误?任何想法都非常受欢迎。

感谢。

1 个答案:

答案 0 :(得分:1)

我也无法使用'clr-namespace:...'命名空间声明来解决这个问题。我必须做的是使用XmlnsDefintionAttribute在我的代码中声明一个xml定义映射。放置此属性的一个方便的位置是AssemblyInfo.cs。不要将它放在命名空间块中。

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

然后,您必须使用“xmlns:local”XML属性中的URL替换clr-namespace(下面示例中的第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>";