WPF DragEnter не запускает изображение

1

У меня есть изображение, которое находится внутри элемента табуляции:

       <TabItem x:Name="tabThreeTb" Header="Photos" HorizontalAlignment="Left" Height="22" VerticalAlignment="Top" Width="55" Margin="1,0,-1,0">
            <Grid x:Name="tabThreeBdy" Background="#FFE5E5E5">
                <Rectangle Fill="#FFE5E5E5" HorizontalAlignment="Left" Height="369" Margin="12,13,0,0" Stroke="Black" VerticalAlignment="Top" Width="467">
                    <Rectangle.Effect>
                        <DropShadowEffect/>
                    </Rectangle.Effect>
                </Rectangle>
                <TextBox x:Name="picNotesTextBox" HorizontalAlignment="Left" Height="415" Margin="498,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="299"/>
                <Button x:Name="nxtPhotoBtn" Content="Next" HorizontalAlignment="Left" Margin="404,403,0,0" VerticalAlignment="Top" Width="75"/>
                <Button x:Name="prevPhotoBtn" Content="Prev" HorizontalAlignment="Left" Margin="10,403,0,0" VerticalAlignment="Top" Width="75"/>
                <Label x:Name="photoNumLbl" Content="1 of 4" HorizontalAlignment="Left" Margin="226,401,0,0" VerticalAlignment="Top" Width="42"/>
                <Image x:Name="photoTabImage" HorizontalAlignment="Left" Height="369" Margin="12,13,0,0" VerticalAlignment="Top" Width="467" AllowDrop="True" DragEnter="photoTabImage_DragEnter"/>
            </Grid>
        </TabItem>

Я пытаюсь использовать перетаскивание, чтобы включить добавление фотографий в список, содержащий пути для источника изображения, хотя я, похоже, не могу запустить процедуру DragEnter...

Я бы хотел, чтобы функция перетаскивания была только живой, когда содержимое перетаскивается по границам изображения.

Есть ли что-то, что мне нужно сделать для элемента, который вложен в элемент управления вкладкой, чтобы это разрешить?

  • 0
    Image не вызывают DragEnter и DragOver . Этот баг wpf. Используйте другие элементы управления для переопределения Image . Например Label
Теги:
wpf

2 ответа

0
Лучший ответ

попробуйте добавить

    <Label HorizontalAlignment="{Binding ElementName=photoTabImage, Path=HorizontalAlignment}" 
           Height="{Binding ElementName=photoTabImage, Path=Height}"
           Width="{Binding ElementName=photoTabImage, Path=Width}"
           Margin="{Binding ElementName=photoTabImage, Path=Margin}"
           VerticalAlignment="{Binding ElementName=photoTabImage, Path=VerticalAlignment}"
           AllowDrop="True" Drop="ContainerDrop" DragOver="ContainerDragOver"/>

после изображения, и используйте событие DragOver

если вам нужно проанализировать объект drop, добавьте следующий код внутри класса

    private void ContainerDrop(object sender, DragEventArgs e)
    {
      StringBuilder sb = new StringBuilder();
      foreach (string format in e.Data.GetFormats())
      {
        sb.AppendLine("Format:" + format);
        try
        {
          object data = e.Data.GetData(format);
          sb.AppendLine("Type:" + (data == null ? "[null]" : data.GetType().ToString()));
          sb.AppendLine("Data:" + data.ToString());
        }
        catch (Exception ex)
        {
          sb.AppendLine("!!CRASH!! " + ex.Message);
        }
        sb.AppendLine("=====================================================");
      }
      Console.WriteLine(sb.ToString());
    }
    private void ContainerDragOver(object sender, DragEventArgs e)
    {
      e.Effects = DragDropEffects.Copy;
      e.Handled = true;
    }
  • 0
    Это сработало отлично! Спасибо!! Я не знал об этой ошибке с WPF ... Полезно знать!
0

Проблема в том, что ваше приложение по какой-то причине не может выполнять стандартные события. Чтобы исправить это, переключите его на модель туннелирования, просто заменив ваши события на версии Preview (например, замените DragEnter="photoTabImage_DragEnter" на PreviewDragEnter="photoTabImage_DragEnter")

С уважением, Макс!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню