developer tip

파일을 WPF로 끌어서 놓기

copycodes 2020. 8. 26. 08:00
반응형

파일을 WPF로 끌어서 놓기


내 WPF 응용 프로그램에 이미지 파일을 드롭해야합니다. 현재 파일을 놓을 때 이벤트가 발생하지만 다음에 어떻게해야할지 모르겠습니다. 이미지는 어떻게 얻습니까? 는 IS sender객체는 이미지 또는 제어?

private void ImagePanel_Drop(object sender, DragEventArgs e)
{
    //what next, dont know how to get the image object, can I get the file path here?
}

이것은 기본적으로 당신이 원하는 것입니다.

private void ImagePanel_Drop(object sender, DragEventArgs e)
{

  if (e.Data.GetDataPresent(DataFormats.FileDrop))
  {
    // Note that you can have more than one file.
    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);

    // Assuming you have one file that you care about, pass it off to whatever
    // handling code you have defined.
    HandleFileOpen(files[0]);
  }
}

또한 실제로 XAML에서 이벤트를 연결하고 AllowDrop특성 을 설정하는 것을 잊지 마십시오 .

<StackPanel Name="ImagePanel" Drop="ImagePanel_Drop" AllowDrop="true">
    ...
</StackPanel>

이미지 파일은 클래스e 의 인스턴스 인 매개 변수에 포함되어 있습니다. ( 매개 변수는 이벤트를 발생시킨 개체에 대한 참조를 포함합니다.)DragEventArgs
sender

특히 e.Data회원을 확인하십시오 . 설명서에 설명 IDataObject된대로 드래그 이벤트의 데이터를 포함하는 데이터 객체 ( )에 대한 참조를 반환합니다 .

IDataObject인터페이스는 후있어하는 데이터 객체를 검색하기위한 방법을 제공합니다. 작업중인 데이터의 형식을 찾기 위해 GetFormats메서드호출하여 시작하는 것이 좋습니다. (예를 들어, 실제 이미지입니까 아니면 단순히 이미지 파일의 경로입니까?)

그런 다음 드래그되는 파일의 형식을 확인한 후 GetData메서드 의 특정 오버로드 중 하나를 호출 하여 실제로 특정 형식의 데이터 개체를 검색합니다.


AR의 답변 외에도 TextBox드롭 에 사용 하려면 다음 사항을 알아야합니다.

TextBox에 대한 기본 처리가 이미있는 것 같습니다 DragAndDrop. 데이터 개체가 String이면 단순히 작동합니다. 다른 유형은 처리되지 않으며 금지 된 마우스 효과가 발생 하고 Drop 핸들러가 호출되지 않습니다.

당신이 당신의 자신의 처리를 활성화 할 수 있습니다 것 같아 e.Handled진정한 A의 PreviewDragOver이벤트 핸들러.

XAML

<TextBox AllowDrop="True"    x:Name="RtbInputFile"      HorizontalAlignment="Stretch"   HorizontalScrollBarVisibility="Visible"  VerticalScrollBarVisibility="Visible" />

씨#

RtbInputFile.Drop += RtbInputFile_Drop;            
RtbInputFile.PreviewDragOver += RtbInputFile_PreviewDragOver;

private void RtbInputFile_PreviewDragOver(object sender, DragEventArgs e)
{
    e.Handled = true;
}

private void RtbInputFile_Drop(object sender, DragEventArgs e)
{
     if (e.Data.GetDataPresent(DataFormats.FileDrop))
     {
                // Note that you can have more than one file.
                string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
                var file = files[0];                
                HandleFile(file);  
     }
}

참고 URL : https://stackoverflow.com/questions/5662509/drag-and-drop-files-into-wpf

반응형