c# - 在运行时创建通用对象
问题描述
我正在使用拖放制作一个应用程序,我基本上想要的是在我将对象从列表中拖动到“主要区域”时创建一个新对象。我有一个抽象类
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);
}
}
我的 drop 方法如下所示:
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";
}
}
我想在这里发生的是,当它被丢弃时,它成为一个独立于其他实体的新实体。
希望这是有道理的!谢谢!
解决方案
因此,我通过将 drop 方法更改为:
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);
}
看来激活器是我需要的。
推荐阅读
- python - 可视化深拷贝和浅拷贝之间的差异
- c# - 如何将 BLOB 放在 root 中,而不是 $root?
- python - 让它在输入输入后不必按“Enter” - Python
- kotlin - 在 Kotlin 中获取可变参数的类型不匹配
- javascript - 帮助查找包含模运算符的 if 语句中的模式
- sql - SQL Server 将密码值设置为 0x00,安全问题?
- javascript - 将 Qualtrics 中的图形自动调整为参与者屏幕的大小?
- php - 如何使用 ajax 和 json 获得价值?
- list - golang 没有解析 stdin 的最后一个元素
- amazon-s3 - 有没有一种方法可以定义一个函数来根据 kafka connect 中的主题消息来决定 S3 路径