C# 程序生成的图像没有画布

C# 程序生成的图像没有画布,c#,wpf,C#,Wpf,虽然这个标题是一个轻微的谎言,但它定义了问题 我在WPF窗口上有一个图像,它的根元素是画布,这个图像附带了各种事件处理程序,允许我在窗口中拖动它 这一切都很好,但当我向画布的子对象添加新图像并绑定相同的事件处理程序时,图像不会移动 现在我已经跟踪到了这一点(所有的处理程序都绑定良好),并且似乎出于某种原因,在我的MouseDownEvent中Canvas.GetLeft(((Image)sender))属性总是NaN 这是我用来创建/添加新图像的代码: // Just a class inher

虽然这个标题是一个轻微的谎言,但它定义了问题

我在WPF窗口上有一个图像,它的根元素是画布,这个图像附带了各种事件处理程序,允许我在窗口中拖动它

这一切都很好,但当我向画布的子对象添加新图像并绑定相同的事件处理程序时,图像不会移动

现在我已经跟踪到了这一点(所有的处理程序都绑定良好),并且似乎出于某种原因,在我的MouseDownEvent中Canvas.GetLeft(((Image)sender))属性总是NaN

这是我用来创建/添加新图像的代码:

// Just a class inheriting from Image
DraggableMediaItem newItem = new DraggableMediaItem();

Uri uri = new Uri(ofd.FileName, UriKind.Absolute);
BitmapImage icon = new BitmapImage(uri);
newItem.Source = icon;

newItem.PreviewMouseDown += new MouseButtonEventHandler(DragMe_MouseDown);
newItem.PreviewMouseMove += new MouseEventHandler(DragMe_MouseMove);
newItem.PreviewMouseUp += new MouseButtonEventHandler(DragMe_MouseUp);
newItem.TextInput += new TextCompositionEventHandler(DragMe_TextInput);
newItem.LostMouseCapture += new MouseEventHandler(DragMe_LostMouseCapture);

RootCanvas.Children.Add(newItem);

要设置Canvas Cals的左、右、上、下附着属性,应该使用Canvas类的Set(side)静态方法

Canvas.SetLeft(newItem, 10d);

右侧、顶部和底部属性也是一样。

谢谢,我知道这一点,我已经通过XAML为画布上绘制的图像提供了所有拖放功能,但是通过编程添加的onmousedown对itAh没有任何价值,我是通过您的建议解决的。我没有意识到我需要先设置它仅供参考:我只是在上面的代码片段Canvas.SetLeft(newItem,0)中添加了这两行代码;Canvas.SetTop(newItem,0);您可以在任何需要的地方设置此属性。不仅仅是在创造你的形象。如果uiElement将画布作为父元素,则此属性将影响元素的位置。包含在任何其他父项中都不会有任何效果。