2

我在我的 wpf 应用程序中搜索嵌入自定义拖放光标。我最终得到了一篇我不知道代码中建议的 ONE LINE 的文章(它在评论中突出显示):

   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 回答