【发布时间】:2012-09-30 16:41:25
【问题描述】:
我的应用动态加载 XAML - XAML 可以来自我的服务器,因此我不能只实例化控件。
我为此使用 XamlReader.Load(),并且已经使用了一段时间。
我现在遇到一个奇怪的问题 - 当我尝试反序列化包含对我的触发器的引用的 XAML 时,阅读器会抛出一个异常,说它无法解析 xaml:
System.Windows.Markup.XamlParseException 发生 Message=Unknown 解析器错误:扫描仪 2147500037。[行:5 位置:10]
LineNumber=5 LinePosition=10 StackTrace: 在 MS.Internal.XcpImports.CreateFromXaml(字符串 xamlString,布尔值 createNamescope,布尔值 requireDefaultNamespace,布尔值 allowEventHandlers, Boolean expandTemplatesDuringParse, Boolean trimDeclaredEncoding) 在 System.Windows.Markup.XamlReader.Load(字符串 xaml) 在 LoadXamlFail.MainPage.myTrigger_Clicked(Object sender, RoutedEventArgs e)
现在,当我尝试反序列化包含对 Blend 触发器的引用的 XAML 时,一切正常。这是包含 Blend 触发器的 XAML:
<Grid x:Name="LayoutRoot">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<eim:PlaySoundAction/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Grid>
这是包含我的触发器的 XAML:
<Grid x:Name="LayoutRoot">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<local:MyTrigger/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Grid>
我的触发器很简单——它基本上什么都不做:
public class MyTrigger : TriggerAction<FrameworkElement>
{
public MyTrigger()
{
}
protected override void Invoke(object parameter)
{
}
}
加载 XAML 的代码(两种情况下相同的代码 - 一种有效,另一种无效)如下所示:
using (var stream = App.GetResourceStream(new System.Uri("/LoadXamlFail;component/OtherTriggerControl.xaml", UriKind.Relative)).Stream)
using (var reader = new StreamReader(stream))
{
var xaml = reader.ReadToEnd();
xaml = FixXaml(xaml);
XamlReader.Load(xaml);
}
最后,通过删除支持 XAML 的控件来加载 XAML 工作正常。
有谁知道是什么原因造成的,或者如何解决这个问题?
(如果有人想看一个工作示例,请下载代码here)
【问题讨论】:
-
我在访问示例时收到一条错误消息:“您尝试访问的项目已被删除或对您不可用”
标签: c# silverlight windows-phone-7 xaml windows-phone-7.1