Подскажите, в чем ошибка.
Хочу чтобы с помощью drag&drop вставляло картинку, но после перетаскивания получаю объект Image
со свойством Source
равным null
XAML
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ScrollViewer Grid.RowSpan="2">
<StackPanel CanVerticallyScroll="True">
<Image Source="Resources/part1.jpg" Width="280" Height="121" Margin="0,10,0,10" MouseDown="Image_MouseDown" Stretch="UniformToFill"/>
<Image Source="Resources/part2.jpg" Width="280" Height="121" Margin="0,10,0,10" MouseDown="Image_MouseDown" Stretch="UniformToFill"/>
<Image Source="Resources/part3.jpg" Width="280" Height="121" Margin="0,10,0,10" MouseDown="Image_MouseDown" Stretch="UniformToFill"/>
<Image Source="Resources/part4.jpg" Width="280" Height="121" Margin="0,10,0,10" MouseDown="Image_MouseDown" Stretch="UniformToFill"/>
<Image Source="Resources/part5.jpg" Width="280" Height="121" Margin="0,10,0,10" MouseDown="Image_MouseDown" Stretch="UniformToFill"/>
<Image Source="Resources/part6.jpg" Width="280" Height="121" Margin="0,10,0,10" MouseDown="Image_MouseDown" Stretch="UniformToFill"/>
</StackPanel>
</ScrollViewer>
<Canvas Grid.Column="1" Margin="0,0,0,0" >
<Image Source="Resources/part1.jpg" Width="280" Height="120" Drop="Image_Drop" DragEnter="Image_DragEnter" AllowDrop="True" Stretch="UniformToFill" Canvas.Left="156" Canvas.Top="51"/>
<Image Source="Resources/part2.jpg" Width="280" Height="120" Drop="Image_Drop" AllowDrop="True" Stretch="UniformToFill" Canvas.Left="436" Canvas.Top="51"/>
<Image Source="Resources/part3.jpg" Width="280" Height="120" Drop="Image_Drop" AllowDrop="True" Stretch="UniformToFill" Canvas.Left="156" Canvas.Top="170"/>
<Image Source="Resources/part4.jpg" Width="280" Height="120" Drop="Image_Drop" AllowDrop="True" Stretch="UniformToFill" Canvas.Left="436" Canvas.Top="170"/>
<Image Source="Resources/part5.jpg" Width="280" Height="120" Drop="Image_Drop" AllowDrop="True" Stretch="UniformToFill" Canvas.Left="156" Canvas.Top="288"/>
<Image Source="Resources/part6.jpg" Width="280" Height="120" Drop="Image_Drop" AllowDrop="True" Stretch="UniformToFill" Canvas.Left="436" Canvas.Top="288"/>
</Canvas>
</Grid>
C#
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Image_Drop(object sender, DragEventArgs e)
{
((Image) sender).Source = e.Source as ImageSource;
}
private void Image_MouseDown(object sender, MouseButtonEventArgs e)
{
// sender – объект, на котором произошло данное событие.
Image lbl = sender as Image;
// Создаем источник.
// Копируем содержимое метки Drop.
// 1 параметр: Элемент управления, который будет источником.
// 2 параметр: Данные, которые будут перемещаться.
// 3 параметр: Эффект при переносе.
DragDrop.DoDragDrop(lbl, lbl.Source, DragDropEffects.Copy);
}
private void Image_DragEnter(object sender, DragEventArgs e)
{
e.Effects = DragDropEffects.Copy;
}
}
ссылка на гит https://github.com/Sechik/Puzzle
У тебя Source разные(ты их пытаешся присвоить):
{pack://application:,,,/Puzzle;component/Resources/part3.jpg}
{System.Windows.Controls.Image}
Так происходит копирование, но картинка одна и та же в sender
и e
private void Image_Drop(object sender, DragEventArgs e)
{
//((Image) sender).Source = e.Source as ImageSource;
Image image = e.Source as Image;
((Image)sender).Source = image.Source;
}
Вот готовое решение (здесь картинка передаётся через дополнительную переменную):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Puzzle
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public static Image global_sender;
public MainWindow()
{
InitializeComponent();
}
private void Image_Drop(object sender, DragEventArgs e)
{
//((Image) sender).Source = e.Source as ImageSource;
//Image image = e.Source as Image;
//((Image)sender).Source = image.Source;
((Image)sender).Source = global_sender.Source;
}
private void Image_MouseDown(object sender, MouseButtonEventArgs e)
{
// sender – объект, на котором произошло данное событие.
Image lbl = sender as Image;
global_sender = lbl;
// Создаем источник.
// Копируем содержимое метки Drop.
// 1 параметр: Элемент управления, который будет источником.
// 2 параметр: Данные, которые будут перемещаться.
// 3 параметр: Эффект при переносе.
DragDrop.DoDragDrop(lbl, lbl.Source, DragDropEffects.Copy);
}
private void Image_DragEnter(object sender, DragEventArgs e)
{
e.Effects = DragDropEffects.Copy;
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Доброго времени сутокВозникла проблема при попытке передать файл с помощью сокетов
Не получается сделать так, чтобы браузер перезагружал страницы из папки Example при их измененииУ меня стоит сборка Xampp (Apache)