wpf пытаюсь перетащить одну картинку и дропнуть её в другой блок image.
При нажатии на картинку с котом вызывается mousedown и следующий код
private void GetImage(object sender, MouseButtonEventArgs e)
{
Image lbl = sender as Image;
global_sender = lbl;
DragDrop.DoDragDrop(lbl, lbl.Source, DragDropEffects.Copy);
}
Затем при дропе вызывается след. код(только видимо не вызывается)
private void DropImage(object sender, DragEventArgs e)
{
((Image)sender).Source = global_sender.Source;
}
private void Image_DragEnter(object sender, DragEventArgs e)
{
e.Effects = DragDropEffects.Copy;
}
Не могу найти ошибку
ну и xaml
<Grid>
<TextBox HorizontalAlignment="Left" Height="38" Margin="623,26,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="128"/>
<Button Content="Назад" HorizontalAlignment="Left" Margin="42,385,0,0" VerticalAlignment="Top" Width="104" Height="36" Click="BackPage"/>
<ListBox x:Name="ClothList" HorizontalAlignment="Left" Height="368" Margin="18,12,0,0" VerticalAlignment="Top" Width="150" ScrollViewer.HorizontalScrollBarVisibility="Disabled" MouseDown="GetImage"/>
<Border BorderThickness="1" BorderBrush="Black" Margin="317,82,321,240">
<Image x:Name="Imagehead" HorizontalAlignment="Left" Height="108" Margin="-1" VerticalAlignment="Top" Width="123" AllowDrop="True" Drop="DropImage" DragEnter="Image_DragEnter"/>
</Border>
<Image x:Name="CatImage" Source="cat.png" HorizontalAlignment="Left" Height="99" VerticalAlignment="Top" Width="132" Margin="504,82,0,0" MouseDown="GetImage"/>
</Grid>`
Проблема в том, что элемент Image, на который должный дропится данные - прозрачный для мыши. Один из вариантов - дропить на Border и поставить ему какой-нибудь Background (например, White) но применять картинку к его ребенку:
<Border BorderThickness="1" BorderBrush="Black" Background="White" AllowDrop="True" Drop="DropImage">
<Image Height="108" Width="123" />
</Border>
<Image Source="cat.png" Height="99" Width="132" MouseDown="GetImage" />
В таком случае драггинг должен выглядеть как:
private void GetImage(object sender, MouseButtonEventArgs e)
{
var image = (Image)sender;
var data = new DataObject(typeof(ImageSource), image.Source);
DragDrop.DoDragDrop(image, data, DragDropEffects.Copy);
}
private void DropImage(object sender, DragEventArgs e)
{
var border = (Border)sender;
var image = (Image)border.Child;
image.Source = (ImageSource)e.Data.GetData(typeof(ImageSource));
}
Для дальнейшего обучения я бы вам порекомендовал изучить паттерн MVVM. С помощью него и Behavior-ов можно сделать более красивое Drag&Drop решение.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники