programing

파일을 WPF로 드래그 앤 드롭

testmans 2023. 4. 15. 08:30
반응형

파일을 WPF로 드래그 앤 드롭

이미지 파일을 WPF 응용 프로그램에 드롭해야 합니다.현재 파일을 드롭하면 이벤트가 발생하지만, 다음에 어떻게 해야 할지 모르겠습니다.이미지 입수 방법이요?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>

이미지 파일은 에 포함되어 있습니다.eparameter: 클래스의 인스턴스입니다.
(the.sender파라미터에는 이벤트를 발생시킨 오브젝트에 대한 참조가 포함되어 있습니다.)

구체적으로 구성원을 확인합니다. 설명서에 설명된 대로 끌기 이벤트의 데이터를 포함하는 데이터 개체()IDataObject에 대한 참조가 반환됩니다.

IDataObjectinterface에는 원하는 데이터 객체를 취득하기 위한 여러 가지 메서드가 있습니다.먼저 메서드를 호출하여 작업 중인 데이터의 형식을 확인하는 것이 좋습니다(예를 들어 실제 이미지인지 아니면 단순히 이미지 파일의 경로인지).

그런 다음 끌어오는 파일의 형식을 식별하면 특정 오버로드 중 하나를 호출합니다.GetData특정 형식으로 데이터 개체를 실제로 가져오는 메서드입니다.

A.R.의 답변에 덧붙여, 만약 당신이 다음을 사용하고 싶다면,TextBox떨어뜨리려면 다음 사항을 알아야 합니다.

TextBox에 대한 디폴트 처리가 이미 되어 있는 것 같습니다.DragAndDrop데이터 객체가 다음과 같은 경우String간단하게 동작합니다.다른 유형은 처리되지 않고 금지 마우스 효과가 나타나며 드롭 핸들러가 호출되지 않습니다.

사용자 자신의 처리를 활성화 할 수 있을 것 같습니다.e.Handled에 있어서 진실하다PreviewDragOver이벤트 핸들러

XAML

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

C#

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

반응형