Silverlight - XamlParseException 找不到类型 'Type'
Silverlight - XamlParseException The type 'Type' was not found
The type 'Type' was not found. [Line: 7 Position: 21]
我正在尝试动态生成数据模板。它工作正常,但如果我包含此属性,则会出现上述异常。
Width="{Binding Path=ActualWidth,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type telerik:GridViewCell}}}"
以及完整的方法:
public DataTemplate GetTextColumnTemplate(int index)
{
string templateValue = @"
<DataTemplate
xmlns:sys=""clr-namespace:System;assembly=mscorlib""
xmlns:telerik=""http://schemas.telerik.com/2008/xaml/presentation""
xmlns=""http://schemas.microsoft.com/client/2007""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
<StackPanel>
<TextBox Width=""{Binding Path=ActualWidth,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type telerik:GridViewCell}}}"" Text=""{Binding Path=V" + (index + 1).ToString() + @",Mode=TwoWay}"" AcceptsTab=""True"" AcceptsReturn=""True""/>
</StackPanel>
</DataTemplate>";
return (DataTemplate)XamlReader.Load(templateValue);
}
错误是因为 XAML 解析器无法将 XAML 中的类型 x:Type
解析为有效的 CLR 类型,可能是因为 XAML 中的命名空间映射如果没有适当的上下文,XAML reader 无法正确处理。
我有一个自定义版本的 this which uses a ParserContext
来为 XAML 定义 XML 命名空间映射:
var context = new ParserContext {XamlTypeMapper = new XamlTypeMapper(new string[0])};
context.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
context.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml");
//... And so on add other xmlns mappings here.
var template = (DataTemplate) XamlReader.Parse(yourXAMLstring, context);
您有一个 Silverlight
项目。 Silverlight 不支持标记扩展 x:Type
。 Silverlight 中的祖先绑定如下所示:
{Binding Path=Foo, RelativeSource={RelativeSource AncestorType=UserControl}}
[编辑]
顺便说一句,你不能绑定到 ActualWidth
。您必须观察 SizeChanged
事件并有一些处理代码。你会发现这个问题的非常优雅的解决方案 here: binding-to-actualwidth.
The type 'Type' was not found. [Line: 7 Position: 21]
我正在尝试动态生成数据模板。它工作正常,但如果我包含此属性,则会出现上述异常。
Width="{Binding Path=ActualWidth,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type telerik:GridViewCell}}}"
以及完整的方法:
public DataTemplate GetTextColumnTemplate(int index)
{
string templateValue = @"
<DataTemplate
xmlns:sys=""clr-namespace:System;assembly=mscorlib""
xmlns:telerik=""http://schemas.telerik.com/2008/xaml/presentation""
xmlns=""http://schemas.microsoft.com/client/2007""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
<StackPanel>
<TextBox Width=""{Binding Path=ActualWidth,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type telerik:GridViewCell}}}"" Text=""{Binding Path=V" + (index + 1).ToString() + @",Mode=TwoWay}"" AcceptsTab=""True"" AcceptsReturn=""True""/>
</StackPanel>
</DataTemplate>";
return (DataTemplate)XamlReader.Load(templateValue);
}
错误是因为 XAML 解析器无法将 XAML 中的类型 x:Type
解析为有效的 CLR 类型,可能是因为 XAML 中的命名空间映射如果没有适当的上下文,XAML reader 无法正确处理。
我有一个自定义版本的 this which uses a ParserContext
来为 XAML 定义 XML 命名空间映射:
var context = new ParserContext {XamlTypeMapper = new XamlTypeMapper(new string[0])};
context.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
context.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml");
//... And so on add other xmlns mappings here.
var template = (DataTemplate) XamlReader.Parse(yourXAMLstring, context);
您有一个 Silverlight
项目。 Silverlight 不支持标记扩展 x:Type
。 Silverlight 中的祖先绑定如下所示:
{Binding Path=Foo, RelativeSource={RelativeSource AncestorType=UserControl}}
[编辑]
顺便说一句,你不能绑定到 ActualWidth
。您必须观察 SizeChanged
事件并有一些处理代码。你会发现这个问题的非常优雅的解决方案 here: binding-to-actualwidth.