private void ColumnSourceItem_MouseDown(object sender, MouseButtonEventArgs e) { Mouse.Capture(root); sourceItem = sender as ColumnSourceItem; this.Cursor = Cursors.Hand; // 已选中项,无反应 // 未选中项,记录选中项 if (tempLine == null) { tempLine = new Line(); tempLine.StrokeStartLineCap = PenLineCap.Round; tempLine.StrokeEndLineCap = PenLineCap.Round; tempLine.StrokeDashCap = PenLineCap.Round; //tempLine.StrokeDashArray = new DoubleCollection(new double[] { 3, 2 }); tempLine.StrokeThickness = 3; tempLine.Stroke = new SolidColorBrush(Colors.Silver); root.Children.Add(tempLine); tempLine.X1 = getStartLocation().Width; tempLine.Y1 = getStartLocation().Height; tempLine.X2 = e.GetPosition(root).X; tempLine.Y2 = e.GetPosition(root).Y; Debug.WriteLine(string.Format("x1:{0} , y1:{1}", tempLine.X1, tempLine.Y1)); } }
private void ColumnTargetItem_MouseUp(object sender, MouseButtonEventArgs e) { targetItem = sender as ColumnTargetItem; tempLine.X2 = getEndLocation().Width; tempLine.Y2 = getEndLocation().Height; sourceItem = null; targetItem = null; tempLine = null; }
private void root_MouseUp(object sender, MouseButtonEventArgs e) { var p = e.GetPosition(root); // 已选中项,红框显示,无法形成链接 VisualTreeHelper.HitTest(root, null, f => { var element = f.VisualHit; if (element is Border) { object tag = ((Border)element).Tag; if (tag != null) { string columnName = tag.ToString(); var target = targetItemList.FirstOrDefault(item => item.ColumnName == columnName); if (target != null && sourceItem != null) { targetItem = target; if (!ColumnMap.ContainsKey(targetItem.ColumnName)) { drawLine(sourceItem.ColumnName, targetItem.ColumnName); ColumnMap.Add(targetItem.ColumnName, sourceItem.ColumnName); targetItem.ColumnValue = sourceItem.ColumnName; TableDAL.Comment(TableName, targetItem.ColumnName, sourceItem.ColumnName); } } } } return(HitTestResultBehavior.Continue); }, new PointHitTestParameters(p)); // 未选中项,记录选中项,画线 root.ReleaseMouseCapture(); root.Children.Remove(tempLine); tempLine = null; sourceItem = null; }
private void showSource() { for (int i = 0; i < Source.Columns.Count; i++) { ColumnSourceItem item = new ColumnSourceItem(); item.ColumnName = Source.Columns[i].ColumnName; item.ColumnValue = Source.Rows[0][i].ToString(); item.Index = i; item.MouseDown += ColumnSourceItem_MouseDown; Canvas.SetLeft(item, 0); Canvas.SetTop(item, 30 * i); root.Children.Add(item); sourceItemList.Add(item); } }