none
有关文件拖放的问题 RRS feed

  • 问题

  • 我将Window设置为AllowDrop="True",但是我发现拖拉的文件只有在移动到窗体的空白部位的时候才会有效果,如果移动到控件上面,就会显示一个无效的图标。

    我的窗体里面包含了很多控件,难道我需要为所有的控件都添加AllowDrop="True"以及设置Drop事件处理程序吗?


    da jia hao!

    2020年7月1日 9:10

全部回复

  • 你好,

    UIElement.AllowDrop属性是如果此元素可用作拖放操作的目标,则为 true;否则为 false。 默认值为 false。如果你只用AllowDrop和Drop来处理的话,可能你要添加很多。但是你可以在后台循环给多有控件添加属性或者事件,比如,你可以用以下代码来处理控件:

     foreach (UIElement uiEle in LayoutRoot.Children)//LayoutRoot是最外层容器的名字
                {
                    if (uiEle is Button || uiEle is TextBox)
                    {
                        uiEle.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(Element_MouseLeftButtonDown), true);
                        uiEle.AddHandler(Button.MouseMoveEvent, new MouseEventHandler(Element_MouseMove), true);
                        uiEle.AddHandler(Button.MouseLeftButtonUpEvent, new MouseButtonEventHandler(Element_MouseLeftButtonUp), true);
                        continue;
                    }
                    //
                    uiEle.MouseMove += new MouseEventHandler(Element_MouseMove);
                    uiEle.MouseLeftButtonDown += new MouseButtonEventHandler(Element_MouseLeftButtonDown);
                    uiEle.MouseLeftButtonUp += new MouseButtonEventHandler(Element_MouseLeftButtonUp);
                }

    这样你就可以给每一个控件设置你想要的事件。

    谢谢

    Daisy Tian


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2020年7月2日 3:35
  • 感觉这种做法不太好...

    另外我发现为何ListBox不需要设置AllowDrop就可以,而RichTextBox和TextBox又不可以?

    对Window设置了AllowDrop="True"不就应该Window下的所有控件都能接受拖放了吗?


    da jia hao!

    2020年7月2日 7:49
  • 你好,

    你是怎么测试得到ListBox不需要设置AllowDrop就可以的?我在UI上测试了,显示的是不可以的。然后我在代码中获取AllowDrop的属性的值为False,与文档中描述的默认值是false一致。

     <TextBox Name="tb" Width="140" Height="30" HorizontalAlignment="Left"></TextBox>
            <ListBox Name="MyListBox" Width="100" Height="200" SelectionMode="Single">
                <ListBoxItem>Item 1</ListBoxItem>
                <ListBoxItem>Item 2</ListBoxItem>
                <ListBoxItem>Item 3</ListBoxItem>
            </ListBox>

    后台代码是:

     this.tb.Text = this.MyListBox.AllowDrop.ToString();

    运行结果是:

    >Window设置了AllowDrop="True"不就应该Window下的所有控件都能接受拖放了吗?

    不应该是所有控件都能接受拖放,这个应该是依赖项属性优先级的问题,子控件的属性优先级应是高于父项的,而子项的AllowDrop默认是false。你可以参考官方文档:依赖属性设置优先级列表

    谢谢

    Daisy Tian


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年7月6日 6:05