使用WPF C#中的设置将子图像添加到画布 [英] Adding Child Image to Canvas with settings in WPF C#
问题描述
我在主窗口中有一个画布控件,当单击按钮时,该控件会将图像(来自路径)添加到画布。
I have a canvas control within my main window that when a button is clicked adds an image (from path) to the canvas.
添加这些图像后,我需要能够拖动这些图像,当使用mouseMove等通过xaml添加这些图像时,可以这样做,但是由于单击事件处理程序是在C#中完成的,如何在C#中添加这些设置
When these images are added I need to be able to drag these around, which I can do when these are added via xaml with mouseMove etc, but due to click event handler is done in C#, how do I add these settings in C#
使用xaml拖动等-不适合动态添加图像/形状
<!-- see below for drag functionality -->
<!--
//these are the xaml settings
//MouseLeftButtonDown = "shape_MouseLeftButtonDown"
//MouseLeftButtonUp = "shape_MouseLeftButtonUp"
//MouseMove = "shape_MouseMove"
-->
<Rectangle x:Name="semiTrailer" Fill="Red" Height="100" Stroke="Black" Width="319" HorizontalAlignment="Left" VerticalAlignment="Bottom" Canvas.Left="48" Canvas.Top="220" MouseLeftButtonDown="shape_MouseLeftButtonDown" MouseLeftButtonUp="shape_MouseLeftButtonUp" MouseMove="shape_MouseMove"/>
点击处理程序-如何添加移动,请点击此处设置
private void addSemiOnly_Click(object sender, RoutedEventArgs e)
{
try {
Image img;
img = new Image();
img.Source = new BitmapImage(new Uri(@"/NexansOlexProcessTools;component/Images/canvasImages/BTrailerOnlyTypeA.png", UriKind.Relative));
//these are the xaml settings
//MouseLeftButtonDown = "shape_MouseLeftButtonDown"
//MouseLeftButtonUp = "shape_MouseLeftButtonUp"
//MouseMove = "shape_MouseMove"
//sets height works!
img.Height = 60;
//how to also add
//these are the xaml settings
//MouseLeftButtonDown = "shape_MouseLeftButtonDown"
//MouseLeftButtonUp = "shape_MouseLeftButtonUp"
//MouseMove = "shape_MouseMove"
LayoutRoot.Children.Add(img);
}
catch (Exception drawError)
{
}
}
执行拖动功能的功能-适用于xaml添加的画布项目
private void shape_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
source = (UIElement)sender;
Mouse.Capture(source);
captured = true;
x_shape = Canvas.GetLeft(source);
x_canvas = e.GetPosition(LayoutRoot).X;
y_shape = Canvas.GetTop(source);
y_canvas = e.GetPosition(LayoutRoot).Y;
}
private void shape_MouseMove(object sender, MouseEventArgs e)
{
if (captured)
{
double x = e.GetPosition(LayoutRoot).X;
double y = e.GetPosition(LayoutRoot).Y;
x_shape += x - x_canvas;
Canvas.SetLeft(source, x_shape);
x_canvas = x;
y_shape += y - y_canvas;
Canvas.SetTop(source, y_shape);
y_canvas = y;
}
}
private void shape_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
Mouse.Capture(null);
captured = false;
}
推荐答案
让它在按钮内工作单击处理程序,请参见下面的代码,其中添加了必需的事件以及设置Canvas.Left,Canvas.Top值的重要性
Got it working inside the button click handler, see below code which adds the required events + the importance of setting the Canvas.Left, Canvas.Top values
Image img;
img = new Image();
img.Source = new BitmapImage(new Uri(@"/NexansOlexProcessTools;component/Images/canvasImages/BTrailerOnlyTypeA.png", UriKind.Relative));
//Set Canvas vales - very important
//Canvas.Left = "141"
//Canvas.Top = "116"
Canvas.SetLeft(img, 150);
Canvas.SetTop(img, 130);
//set maouse events handlers for each item
img.MouseMove += new MouseEventHandler(shape_MouseMove);
img.MouseLeftButtonDown += new MouseButtonEventHandler(shape_MouseLeftButtonDown);
img.MouseLeftButtonUp += new MouseButtonEventHandler(shape_MouseLeftButtonUp);
//xaml settings
//MouseLeftButtonDown = "shape_MouseLeftButtonDown"
//MouseLeftButtonUp = "shape_MouseLeftButtonUp"
//MouseMove = "shape_MouseMove"
addSemiOnlyCount++;
img.Tag = "addSemiOnlyId_" + addSemiOnlyCount;
img.Name = "addSemiOnlyId_" + addSemiOnlyCount;
img.ToolTip = "Item ID: addSemiOnlyId_" + addSemiOnlyCount;
img.Height = 90;
LayoutRoot.Children.Add(img);
这篇关于使用WPF C#中的设置将子图像添加到画布的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!