2

wpfアプリにカスタムのドラッグアンドドロップカーソルを埋め込むことを検索しました。私はで提案されたコードの1行がわからない記事になりました(コメントで強調表示されています):

   private void textBlock2_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        TextBlock btn = (TextBlock)sender;

        GiveFeedbackEventHandler handler = new GiveFeedbackEventHandler(DragSource_GiveFeedback);
        btn.GiveFeedback += handler;


        DataObject dataObj = new DataObject(btn.Text);
        DragDrop.DoDragDrop(btn, dataObj, DragDropEffects.Move);
        btn.GiveFeedback -= handler;

    }

    void DragSource_GiveFeedback(object sender, GiveFeedbackEventArgs e)
    {
        try
        {
            if (_allOpsCursor == null)
            {

                ////////////////////////////////////////THE UNKOWN ONE LINE STARTS HERE
                using (Stream cursorStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("SimplestDragDrop.DDIcon.cur")) // AND ENDS HERE
                {
                    _allOpsCursor = new Cursor(cursorStream);
                }
            }
            Mouse.SetCursor(_allOpsCursor);

            e.UseDefaultCursors = false;
            e.Handled = true;
        }
        finally { }
    }

GetManifestResourceStreamを確認しましたが、メインフェストリソースがどのように処理され、このキャッシングのアイデア(メインの記事で説明)をどこから始めればよいのかまだわかりません。

4

1 に答える 1

1

アセンブリは、CLR で実行される AppDomain の一部としてメモリに読み込まれます。このため、リソースがコンパイル プロセスの一部としてアセンブリに埋め込まれている場合、ストリームを使用してメモリ内のバイト配列を読み取る方が、ディスクに移動してファイルを開き、その内容を読み取ってファイルを閉じるよりも高速です。 .

代わりに、リソースを表すバイト配列をソース コード内に格納することもできますが、GetManifestResourceStream.

于 2013-01-09T17:15:29.227 に答える