【发布时间】:2019-11-19 22:40:48
【问题描述】:
我有一个“模块”类型的自定义对象,我在其中存储了一个图像和一个名称。这些对象存储在 ListView 中,我将它们拖放到 Canvas 上,这样我就可以排列它们(有点像拼图)。首先,我只是画了图像:
var module = e.Data.GetData("MyFormat") as Module;
Canvas CanvasView = sender as Canvas;
Image image = new Image();
image.Source = module.ModuleImage;
Point enterPoint = e.GetPosition(this.moduleCanvas);
Point PointToDraw = new Point(0, 0);
PointToDraw.X = enterPoint.X - DropPosition.X;
PointToDraw.Y = enterPoint.Y - DropPosition.Y;
//+35 and +43 so the Module gets dropped in the way you picked it up
image.SetValue(Canvas.LeftProperty, PointToDraw.X + 35);
image.SetValue(Canvas.TopProperty, PointToDraw.Y + 43);
CanvasView.Children.Add(image);
但后来我意识到,我需要一个对象在画布上,而不仅仅是一个图像,所以我尝试了这个:
ListViewItem lvitem = new ListViewItem();
var module = e.Data.GetData("MyFormat") as Module;
Canvas CanvasView = sender as Canvas;
lvitem.Content = module;
CanvasView.Children.Add(lvitem);
但这当然不会在画布上渲染图像。它只是告诉我MyNamespace.Module。如何让 Canvas 呈现 ListViewItem 包含的对象的图像?
【问题讨论】:
-
使画布成为项目控件的项目面板。将 itemssource 绑定到 itemviewmodel 的集合。日期模板 itemviewmodel 到任何你想要的。每个项目都在一个容器中。将 canvas.left 和 canvas.top 绑定到 itemviewmodel 中的 x 和 y 属性。如果你用谷歌搜索,你应该能够找到一堆如何做到这一点的例子。很确定我以前在 msdn 上发过帖子。