Я делаю приложение с помощью перетаскивания, и в основном я хочу создать новый объект, когда перетаскиваю объект из списка в «Основную область». У меня есть абстрактный класс
public abstract class SymbolModel
И 2 (нужно намного больше) класса, наследующего от него
public class ValveModel : SymbolModel
public class LightBulbModel : SymbolModel
Когда я перетаскиваю, он появляется, но когда я перетаскиваю несколько, они все одинаковые. Я сделал функцию щелчка, которая поражает все из них, где я хочу сделать это только одним нажатием.
Мой метод dragfrom выглядит так:
private void UIElement_OnMouseMove(object sender, MouseEventArgs e)
{
TextBlock txtBlock = sender as TextBlock;
if (txtBlock == null) return;
if (!(txtBlock.DataContext is SymbolModel)) return;
if (e.LeftButton == MouseButtonState.Pressed)
{
DataObject data = new DataObject();
data.SetData("Object", (SymbolModel) txtBlock.DataContext);
DragDrop.DoDragDrop(this, data, DragDropEffects.Copy | DragDropEffects.Move);
}
}
Мой метод отбрасывания выглядит следующим образом:
private void SymbolView_OnDrop(object sender, DragEventArgs e)
{
Point pos = e.GetPosition(SymbolViewControl);
Console.WriteLine(e.Data.GetData("Object").ToString());
SymbolModel obj = (SymbolModel) e.Data.GetData("Object");
obj.CanvasTopImage = pos.Y;
obj.CanvasLeftImage = pos.X;
_symbolViewModel.Symbols.Add(obj);
}
И мой метод щелчка здесь:
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
if (!(sender is Button btn)) return;
if (!(btn.DataContext is SymbolModel)) return;
SymbolModel symbol = (SymbolModel) btn.DataContext;
foreach (SymbolModel sym in _symbolViewModel.Symbols)
{
Console.WriteLine(sym.Id);
}
if (symbol.ImageName.Equals("valve_green.png"))
{
symbol.ImageName = "valve_red.png";
}
else
{
symbol.ImageName = "valve_green.png";
}
}
Я хочу, чтобы здесь произошло то, что, когда оно отброшено, оно становится новой сущностью, независимой от других.
Надеюсь, это имеет смысл! Спасибо!