Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中的拖放文件不工作_C#_Wpf_Drag And Drop_Mahapps.metro_Avalondock - Fatal编程技术网

C# WPF中的拖放文件不工作

C# WPF中的拖放文件不工作,c#,wpf,drag-and-drop,mahapps.metro,avalondock,C#,Wpf,Drag And Drop,Mahapps.metro,Avalondock,我使用Mahapps进行布局,使用AvalonDock进行选项卡和子窗口布局。但无法使用拖放功能,因为从未调用拖放功能。我还根据为用户设置了(explorer和.exe)权限,但都是徒劳的。无法让这东西工作。avalondock背景:DockingManager控件设置为“#FF2D30”。在dockingManager上从文件资源管理器拖放文件时,不会发生任何事情 <avalonDock:DockingManager AllowDrop="True" x:Name="dockingMan

我使用Mahapps进行布局,使用AvalonDock进行选项卡和子窗口布局。但无法使用拖放功能,因为从未调用拖放功能。我还根据为用户设置了(explorer和.exe)权限,但都是徒劳的。无法让这东西工作。avalondock背景:DockingManager控件设置为“#FF2D30”。在dockingManager上从文件资源管理器拖放文件时,不会发生任何事情

<avalonDock:DockingManager AllowDrop="True" x:Name="dockingManager" DockPanel.Dock="Right"  Theme="{Binding AvalonDockTheme}" PreviewDragEnter="DragFilesEntered" PreviewDrop="FilesDropped" PreviewDragOver="DragFilesEntered">
                    <avalonDock:LayoutRoot>

                        <avalonDock:LayoutPanel Orientation="Horizontal">
                            <avalonDock:LayoutDocumentPaneGroup>
                                <avalonDock:LayoutDocumentPane x:Name="layoutdoc_tabContent">

                                </avalonDock:LayoutDocumentPane>
                            </avalonDock:LayoutDocumentPaneGroup>
                        </avalonDock:LayoutPanel>
                    </avalonDock:LayoutRoot>
                </avalonDock:DockingManager>
编辑:



仍不工作。无法调用拖动功能。

尝试将
AllowDrop=“True”
和关联的处理程序直接放在
布局文档窗格上


一般来说,在XAML中,您必须在放置时通过光标将这些放在超出范围的框架元素上。

LayoutDocumentPane没有AllowDrop属性:(因此将其放在
LayoutDocumentPane
的内容上。(网格或其他东西)是的!但这有什么用呢?因为我正在动态创建一个stackpanel,并将其添加到LayoutDocumentPane内容中(在儿童中)创建放置图像的选项卡。用户应将图像文件放置在停靠区域,而不是已创建的图像选项卡上。在内部,空时DockingManager会显示一个设置背景色等的控件。问题是此控件在DockingManager样式中定义得很深。因此,除非通过redef,否则不能直接插入通过使用Blend(这太无聊了)提取它来手动修改它的样式。所以方法是自己公开一个控件,它处理D'n D逻辑。请检查编辑的问题。我用stackpanel做过同样的尝试,但从未调用过拖放功能
private void DragFilesEntered(object sender, DragEventArgs e)
        {
            MessageBox.Show("Hey");
            bool isValidFile = false;

            if (e.Data.GetDataPresent(DataFormats.FileDrop, true))
            {
                string[] filenames = (string[])e.Data.GetData(DataFormats.FileDrop, true);
                foreach (string filename in filenames)
                {
                    if (File.Exists(filename) == false)
                    {
                        isValidFile = false;
                        break;
                    }
                    FileInfo info = new FileInfo(filename);
                    if (!(info.Extension == ".bmp" || info.Extension == ".png" || info.Extension == ".jpg"))
                    {
                        isValidFile = false;
                        break;
                    }
                } 
            }
            if (isValidFile)
                e.Effects = DragDropEffects.Move;            
            else
                e.Effects = DragDropEffects.None;
        }

        private void FilesDropped(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop, true))
            {
                string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
                foreach(var file in files)
                    ((MainViewModel)this.DataContext).CreateTab(layoutdoc_tabContent, file);
                e.Handled = true; 
            }
        }
<StackPanel PreviewDragEnter="DragFilesEntered" PreviewDrop="FilesDropped" PreviewDragOver="DragFilesEntered" AllowDrop="True" Width="100" Height="100" Orientation="Horizontal" Background="#FFDA1313">

                </StackPanel>