2

コントロールを読み取るためのすべてのクラスのXAMLリフレクションを使用してインスタンスを作成することにより、Silverlight プロジェクトを読み込んですべてのファイルを読み取ろうとしています。Activator.CreateInstanceXAML

C# コード:

string strPath = "SilverlightUI.dll";
StreamResourceInfo sri = Application.GetResourceStream(new Uri(strPath, UriKind.RelativeOrAbsolute));
AssemblyPart assemblyPart = new AssemblyPart();
Assembly assembly = assemblyPart.Load(sri.Stream);
Type[] typeArray = assembly.GetExportedTypes();

foreach (Type type in typeArray)
{
    object ctl = (object)Activator.CreateInstance(type);
    // Following exception is occurring while creating an instance using above line of code 
    // Exception "Cannot find a Resource with the Name/Key ComboBoxStyle"
}

おそらく、リフレクションは Silverlight スタイルを認識できませんComboBoxStyle。XAML ファイル内のすべてのコントロールを動的に読み取るインスタンスを作成するにはどうすればよいですか?

4

2 に答える 2

2

グーグルと格闘した後、私は自分の問題に必要な解決策を見つけることができました。

  1. Silverlightプロジェクトからすべてのスタイルリソースをコピーします(ロードすることを目的としています)。
  2. それらをApp.xamlマスター/呼び出し元のSilverlightプロジェクトまたはアプリケーションに貼り付けます。これは、リフレクションコードを使用してSilverlightコントロール情報を読み込みます。

これらの手順に従うと、スタイルが欠落しているというXAML解析例外が排除されます。

名前/キーComboBoxStyleのリソースが見つかりません

参照:フォームインスタンスの作成時に、XAMLパーサーが動的にロードされたXAP内のリソースを見つけることができません

于 2012-02-08T15:18:52.807 に答える
-1

XamlReaderクラスを使用してカスタム コントロールを読み込むことができました。
リフレクションのアイデアとは異なり、コントロールの XAML を含むプレーンな文字列を使用しています。

//string xaml = "<...>";
var content = XamlReader.Load(xaml) as FrameworkElement;
this.scrollViewer.Content = content;

タイプXamlReaderは ですSystem.Windows.Markup

あなたのケースで可能であれば、アセンブリから XAML リソースを取得し、それらを文字列に読み取ることができます。次に、提供されたコードを使用します。変数を取得したらcontent、Silverlight API を使用してコントロールに対してあらゆる操作を実行できます。
これがあなたを助けることを願っています。

于 2012-02-08T09:07:19.883 に答える