0

XamlReader.Load() を使用して XAML 文字列をプログラムで解析/ロードする方法を見つけましたが、ユーザーが ".xaml" ファイルを Silverlight アプリケーションにドラッグ アンド ドロップした場合、そのファイルをどのように解析してXAML ファイルとその内容を文字列として読み取り、XamlReader.Load() メソッドに提供します。

または、リフレクションを使用するより効率的/より良い方法はありますか?

ユーザーが "silverlight for dummies" の Silverlight デザイナーを (合理的な範囲内で) 使用して、単純なコントロールを設計できるようにしたいと考えています。(つまり、ラベルとテキスト ボックス)。次に、これを保存するか、XAML ファイルとしてエクスポートします (または、単に TXT ファイルとして保存することもできますか?)。次に、このファイルを Silverlight アプリケーションにドロップすると、テキストが XamlReader.Load() に解析されます。 、次に、プログラムで新しく作成したオブジェクトをリストボックスに追加できます。

ファイルのドラッグ アンド ドロップと XAML 文字列の読み込みのロジックはありますが、「.xaml」ファイルの内容を取得する中間点で混乱しています...

編集

@nicholas、それはまさに私が行ったものです。昨日何があったか分からないけど、多分「脳のおなら」があったんだと思う。これが私が最終的に行った方法です:(まだいくつかのクリーンアップとリファクタリングがありますが、これはテスト用でした)

        IDataObject data = e.Data;
        if (data.GetDataPresent(DataFormats.FileDrop))
        {
            FileInfo[] files = data.GetData(DataFormats.FileDrop) as FileInfo[];

            if (files.Length > 1)
            {
                //TODO
            }
            else
            {
                FileInfo file = files[0];
                extension = file.Extension;
                string xaml = string.Empty;
                using (Stream stream = file.OpenRead())
                {
                    xaml = StreamUtils.StreamToString(stream);
                }
                if (!xaml.IsEmpty())
                {
                    try
                    {
                        myListBox.Items.Add(XamlReader.Load(xaml);
                    }
                    catch (Exception ex)
                    {
                        //TODO
                    }
                }
            }
4

2 に答える 2

2

したがって、イベント ハンドラーがあり、そこからプロパティを持つDropイベント引数を受け取ります。MSDNから、ドロップされたファイルのを取得する方法がわかります。これを文字列にロードして (たとえば、 use )、 で解析できます。DataIDataObjectFileStreamStreamReaderXamlReader.Load()

于 2012-04-11T13:17:16.467 に答える
1

私があなたを正しく理解していれば、次の 3 つの異なるステップがあります。

  • .xaml ファイルまたは任意の種類のファイルのコンテンツを "文字列" に解析します (.txt ファイルまたはその他の形式にすることができます)。
  • XamlReader.Load() を使用して、ステップ 1 のこの文字列から UI 要素を生成します。
  • 手順 2 の UI 要素を ListBox.Items コレクションに挿入します。

それは役に立ちますか?

于 2012-04-11T12:21:31.267 に答える