【问题标题】:Programmatically generated image doesnt have a CanvasLeft以编程方式生成的图像没有 Canvas Left
【发布时间】:2010-07-30 08:14:07
【问题描述】:

虽然这个标题有点谎言,但它定义了问题。

我在 WPF 窗口上有一个图像,其根元素是 Canvas,该图像附加了各种事件处理程序,允许我在窗口周围拖动它。

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

现在我已经追踪到这一点(所有处理程序都很好地绑定),似乎在我的 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);

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    要设置 Canvas 类的 Left、Right、Top、Bottom 附加属性,您应该使用 Canvas 类的 Set(side) 静态方法。

    Canvas.SetLeft(newItem, 10d);
    

    More Info at Canvas.SetLeft Method MSDN Article Right、Top 和 Bottom 属性也是如此。

    【讨论】:

    • 谢谢,我知道我的所有拖放操作都可以很好地用于通过 XAML 在画布上绘制的图像,但是以编程方式添加的 onmousedown 没有任何价值
    • 啊,我通过你的建议解决了。我没有意识到我需要先设置它
    • 仅供参考:我刚刚在上面的 sn-p Canvas.SetLeft(newItem, 0); 中添加了这两行。 Canvas.SetTop(newItem, 0);
    • 您可以根据需要设置此属性。不仅在创造你的形象。如果 uiElement 将有一个 Canvas 作为父级,则此属性将影响元素的位置。包含在任何 else 父级中都不会产生任何影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    相关资源
    最近更新 更多