none
设计器的拖拽操作是怎么实现的?在哪里实现的? RRS feed

  • 问题

  • 我最近在写设计器的东西,现在需要一个功能,将文件拖入设计器内时,可以识别并在鼠标位置自动生成一个picbox控件,该怎么做呢

    注: 我用的是designsurface 

    2013年8月7日 6:51

答案

  • 已解决,看懂了很简单,ItoolboxService  接口函数 DeserializeToolboxItem 即可

    public System.Drawing.Design.ToolboxItem DeserializeToolboxItem (object serializedObject, IDesignerHost host)
    		{
                DataObject o = new DataObject((IDataObject)serializedObject);
                if (o.GetDataPresent(DataFormats.FileDrop))
                {
                    string[] FileList = (string[])o.GetData(DataFormats.FileDrop, false);
                    if (FileList.Length > 0)
                    {
                        FileInfo file = new FileInfo(FileList[0]);
                        string a = file.Extension;
                        if (Consts.ImgFilter.ToLower().Contains(a.ToLower()))
                        {
                            return new ImageFileItem(FileList[0]);
                        }
                    }
                }
            	return (System.Drawing.Design.ToolboxItem)o.GetData (typeof(System.Drawing.Design.ToolboxItem));
    		}


    当然,你得先写好ImageFileItem类:

    class ImageFileItem : System.Drawing.Design.ToolboxItem


    实现这个函数:

     
    protected override IComponent[] CreateComponentsCore(IDesignerHost host)

    • 已标记为答案 clarelh 2013年8月14日 8:24
    2013年8月14日 8:24

全部回复

  • 用designersurface 做设计器,如何定制拖动事件呢?请大侠赐教!
    2013年8月8日 8:29
  • 如果想要自己实现这个功能的话还是不太容易的,AvalonDock这个控件可以实现这个功能,而且刚好是针对WFP设计的。


    Caillen
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年8月12日 8:46
    版主
  • 谢谢回复, 不过我不是wpf 架构的.......

    我看了下ItoolboxService 接口,感觉是不是可以用它来实现呢?继续求解中,再次感谢

    2013年8月13日 8:57
  • 已解决,看懂了很简单,ItoolboxService  接口函数 DeserializeToolboxItem 即可

    public System.Drawing.Design.ToolboxItem DeserializeToolboxItem (object serializedObject, IDesignerHost host)
    		{
                DataObject o = new DataObject((IDataObject)serializedObject);
                if (o.GetDataPresent(DataFormats.FileDrop))
                {
                    string[] FileList = (string[])o.GetData(DataFormats.FileDrop, false);
                    if (FileList.Length > 0)
                    {
                        FileInfo file = new FileInfo(FileList[0]);
                        string a = file.Extension;
                        if (Consts.ImgFilter.ToLower().Contains(a.ToLower()))
                        {
                            return new ImageFileItem(FileList[0]);
                        }
                    }
                }
            	return (System.Drawing.Design.ToolboxItem)o.GetData (typeof(System.Drawing.Design.ToolboxItem));
    		}


    当然,你得先写好ImageFileItem类:

    class ImageFileItem : System.Drawing.Design.ToolboxItem


    实现这个函数:

     
    protected override IComponent[] CreateComponentsCore(IDesignerHost host)

    • 已标记为答案 clarelh 2013年8月14日 8:24
    2013年8月14日 8:24