[英]Creating generic object on runtime
I'm making an application with drag and drop and what i basically want is to create a new object when i drag the object from a list and into the "Main area". 我正在通过拖放创建一个应用程序,而我基本上想要的是在将对象从列表中拖入“主区域”时创建一个新对象。 I Have an abstract class
我有一个抽象课
public abstract class SymbolModel
And 2 (need a lot more) classes inhereting from it 还有2个(需要更多)类来自其中
public class ValveModel : SymbolModel
public class LightBulbModel : SymbolModel
When i drag and drop it shows up but when i drag multiple they're all the same. 当我拖放时会显示出来,但是当我拖动多个时,它们都是一样的。 I've made a click function which hits all of them where i only want to do it on the one clicked.
我做了一个单击功能,将所有这些功能都击中了,我只想单击一下就可以了。 My dragfrom method looks like this:
我的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);
}
}
My drop method looks like this: 我的放置方法如下所示:
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);
}
And my click method is here: 我的点击方法在这里:
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";
}
}
What i want to happen here is that when it's dropped it becomes a new entity independent of the others. 我要在这里发生的事情是,当它被丢弃时,它成为一个独立于其他实体的新实体。
Hope this makes sense! 希望这有道理! Thank you!
谢谢!
So i got it to work by changing my drop method to: 所以我通过将放置方法更改为:
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");
Type t = obj.GetType();
var symbol = (SymbolModel)Activator.CreateInstance(t);
symbol.CanvasTopImage = pos.Y;
symbol.CanvasLeftImage = pos.X;
_symbolViewModel.Symbols.Add(symbol);
}
Its seems that the Activator was what i needed. 看来激活器正是我所需要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.