アプリはXAMLを動的にロードします-XAMLはサーバーから取得できるため、コントロールをインスタンス化することはできません。
私はこれにXamlReader.Load()を使用しており、しばらく前から使用しています。
現在、奇妙な性質の問題が発生しています。トリガーへの参照を含むXAMLを逆シリアル化しようとすると、リーダーはxamlを解析できないという例外をスローします。
System.Windows.Markup.XamlParseExceptionが発生しましたメッセージ=不明なパーサーエラー:スキャナー2147500037。[行:5位置:10]
LineNumber = 5 LinePosition = 10 StackTrace:at MS.Internal.XcpImports.CreateFromXaml(String xamlString、Boolean createNamescope、Boolean requireDefaultNamespace 、ブールallowEventHandlers、ブールexpandTemplatesDuringParse、ブールtrimDeclaredEncoding)at System.Windows.Markup.XamlReader.Load(String xaml)at LoadXamlFail.MainPage.myTrigger_Clicked(Object sender、RoutedEventArgs e)
これで、Blendトリガーへの参照を含むXAMLを逆シリアル化しようとすると、すべてが正常に機能します。ブレンドトリガーを含む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を読み込むと、問題なく機能します。
誰かがこれを引き起こしている可能性があるもの、またはそれを回避する方法を知っていますか?
(誰かが実際の例を見たい場合は、ここからコードをダウンロードしてください)