Привет всем, скажите пожалуйста почему в событии MouseMove объекта не работает такая конструкция
Point p = new Point(Canvas.GetLeft(this),Canvas.GetTop(this));
public class RouteElement : UIElement { public string address{get; set;}
List<RouteElement> save_list;
public PortLink port { get; set; }
public List<PortLink> destination_ports;
public string ip { get; set; }
bool canmove = false;
public Point elem_coord { get; set; }
Image icon = null;
public List<Line> connection_lines { get; set; }
MainWindow mw;
public RouteElement(string address, string ip, MainWindow mw)
{
save_list = new List<RouteElement>();
destination_ports = new List<PortLink>();
port = new PortLink();
this.mw = mw;
connection_lines = new List<Line>();
this.address = address; this.ip = ip;
BitmapImage bmp = new BitmapImage();
icon = new Image();
bmp.BeginInit();
bmp.UriSource = new Uri("Images/house-png-202.png",UriKind.Relative);
bmp.EndInit();
icon.Source = bmp;
icon.Height = 30;
icon.Width = 30;
}
public RouteElement( MainWindow mw)
{
this.mw = mw;
port = new PortLink();
destination_ports = new List<PortLink>();
connection_lines = new List<Line>();
save_list = new List<RouteElement>();
BitmapImage bmp = new BitmapImage();
icon = new Image();
bmp.BeginInit();
bmp.UriSource = new Uri("Images/house-png-202.png", UriKind.Relative);
bmp.EndInit();
icon.Source = bmp;
icon.Height = 30;
icon.Width = 30;
}
public Border Show_Element()
{
Border container = new Border();
container.Cursor = Cursors.Hand;
Border info_frame = new Border();
info_frame.Opacity = 0.3;
info_frame.Background = Brushes.Wheat;
info_frame.MouseEnter += new MouseEventHandler(info_frame_MouseEnter);
info_frame.MouseLeave += new MouseEventHandler(info_frame_MouseLeave);
StackPanel stk1 = new StackPanel();
info_frame.Child = stk1;
TextBlock tb1 = new TextBlock();
tb1.Text = address;
tb1.TextAlignment = TextAlignment.Center;
TextBlock tb2 = new TextBlock();
tb2.Text = ip;
tb2.TextAlignment = TextAlignment.Center;
StackPanel stk2 = new StackPanel();
stk2.Children.Add(icon);
stk2.Children.Add(info_frame);
stk1.Children.Add(tb1);
stk1.Children.Add(tb2);
container.Child = stk2;
container.Width = 100;
container.Height = 100;
container.CornerRadius = new CornerRadius(5);
// container.BorderThickness = new Thickness(1);
container.BorderBrush = Brushes.Black;
container.MouseUp += new MouseButtonEventHandler(container_MouseUp);
container.MouseEnter += new MouseEventHandler(container_MouseEnter);
container.MouseLeave += new MouseEventHandler(container_MouseLeave);
container.PreviewMouseDown += new MouseButtonEventHandler(container_PreviewMouseDown);
container.PreviewMouseUp += new MouseButtonEventHandler(container_PreviewMouseUp);
container.PreviewMouseMove += new MouseEventHandler(container_PreviewMouseMove);
return container;
}
void info_frame_MouseLeave(object sender, MouseEventArgs e)
{
DoubleAnimation da = new DoubleAnimation();
da.To = 0.3;
da.Duration = new Duration(TimeSpan.FromSeconds(0.2));
da.BeginAnimation(Border.OpacityProperty, da);
}
void info_frame_MouseEnter(object sender, MouseEventArgs e)
{
DoubleAnimation da = new DoubleAnimation();
da.To = 1;
da.Duration = new Duration(TimeSpan.FromSeconds(0.2));
da.BeginAnimation(Border.OpacityProperty, da);
}
void container_MouseUp(object sender, MouseButtonEventArgs e)
{
if (Keyboard.IsKeyDown(Key.LeftCtrl))
{
Border re = sender as Border;
mw.pair.Add(this);
mw.con.points.Add(new Point(Canvas.GetLeft(re), Canvas.GetTop(re)));
elem_coord = new Point(Canvas.GetLeft(re), Canvas.GetTop(re));
mw.con.route_obj.Add(this);
if (mw.con.route_obj.Count == 2)
{
mw.con.connect_elements(re);
}
}
}
void container_PreviewMouseMove(object sender, MouseEventArgs e)
{
Border re = sender as Border;
if (canmove)
{
re.SetValue(Canvas.LeftProperty, e.GetPosition(null).X - elem_coord.X-5);
re.SetValue(Canvas.TopProperty, e.GetPosition(null).Y - elem_coord.Y-5);
Point p = new Point(Canvas.GetLeft(re),Canvas.GetTop(re));
mw.con.p = p;
mw.con.route_obj_ = this;
//mw.con.update_connection_lines(re);
//здесь баг таится
if (this.connection_lines != null)
{
foreach (var item in this.connection_lines)
{
MessageBox.Show(item.X1.ToString()+" "+p.X.ToString());
MessageBox.Show(item.Y1.ToString() + " " + p.Y.ToString());
if (item.X1 == p.X - re.Width/2 && item.Y1 == p.Y - re.Height/2)
{
MessageBox.Show("первое условие по Х1, Y1");
}
else if (item.X2 == p.X - re.Width / 2 && item.Y2 == p.Y - re.Height / 2)
{
MessageBox.Show("второе условие по Х2, Y2");
}
}
}
}
}
void container_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
Mouse.Capture(null);
canmove = false;
}
void container_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
Border b = sender as Border;
Mouse.Capture(b);
elem_coord = Mouse.GetPosition(b);
canmove = true;
}
void container_MouseLeave(object sender, MouseEventArgs e)
{
}
void container_MouseEnter(object sender, MouseEventArgs e)
{
}
}
}
Вы устанавливаете свойство неправильно:
re.SetValue(Canvas.LeftProperty, ...);
Вместо этого попробуйте
Canvas.SetLeft(re, ...);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей