У меня есть изображение, которое находится внутри элемента табуляции:
<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...
Я бы хотел, чтобы функция перетаскивания была только живой, когда содержимое перетаскивается по границам изображения.
Есть ли что-то, что мне нужно сделать для элемента, который вложен в элемент управления вкладкой, чтобы это разрешить?
попробуйте добавить
<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;
}
Проблема в том, что ваше приложение по какой-то причине не может выполнять стандартные события. Чтобы исправить это, переключите его на модель туннелирования, просто заменив ваши события на версии Preview (например, замените DragEnter="photoTabImage_DragEnter"
на PreviewDragEnter="photoTabImage_DragEnter"
)
С уважением, Макс!
Image
не вызываютDragEnter
иDragOver
. Этот баг wpf. Используйте другие элементы управления для переопределенияImage
. НапримерLabel