12

XAMLファイル(辞書ではなく個別のファイル)として保存され、アプリケーションに埋め込まれたベクターグラフィックをロードしたいのですが、いくつか質問があります。

  1. XAMLは、ベクターイメージのような静的リソース、またはWPFのように動的に構築されているインターフェイスのいずれかを表すために使用できるため、少しあいまいに見えます。このため、XAMLベクター画像の形式は私にはわかりません。svgベクター画像の「svg」タグのように、ルート要素は何である必要がありますか?グラフィックを別のキャンバスにプロットしたいので、現在、トップ要素としてキャンバスを使用しています。

  2. これらのファイルをプログラムでロードする(つまり、xamlファイルからCanvasを作成する)ための最良の方法は何ですか?XamlReaderでさまざまな解決策を見てきましたが、何も機能しませんでした。アプリがクラッシュし、デバッガーが機能しません(発生した問題のほとんどは解析中に発生したようで、エラーメッセージは不明確でした)。

http://learnwpf.com/post/2006/06/04/How-do-I-Include-Vector-Based-Image-Resources-in-my-WPF-Application.aspxを読みましたが、リソースファイルの読み込みに関する記事は廃止されており、画像はC#コードを使用して作成されていません。

4

1 に答える 1

8

さて、私は自分で解決策を見つけました、そしてここにそれがあります:

私のプロジェクトの名前は「Editor」で、読みたいXAMLファイルを「Graphics」フォルダーに配置しました。このファイルの名前は「Image.xaml」です。プロジェクトツリーは次のようになります。

ここに画像の説明を入力してください

XAMLファイル自体がこのコードを保持しています:

<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        Width="40" Height="40">
    <Rectangle Canvas.Left="0" Canvas.Top="0" Fill="White" Stroke="Black" StrokeThickness="1" Height="40" Width="40" />
    <!-- ... -->
</Canvas>

(xaml名前空間'xmlns'参照が必要です)

ファイルのロードに使用されるコードは次のとおりです。

StreamResourceInfo sr = Application.GetResourceStream(new Uri("Editor;component/Graphics/Image.xaml", UriKind.Relative));
Canvas result = (Canvas)XamlReader.Load(new XmlTextReader(sr.Stream));
layoutRoot.Children.Add(result);

'layoutRoot'は、私のアプリケーションのメインCanvasの名前です。

最後の微妙さ:*。xamlファイルのプロパティ'BuildAction'を'Resource'に設定する必要があります。そうしないと、16進値0x0CのXamlParseExceptionが発生します(このプロパティを変更するには、プロジェクトツリービューでファイルを右クリックします)。

これがお役に立てば幸いです。

于 2012-07-14T21:36:30.437 に答える