我在后面的代码中创建了 2 个按钮,我试图通过获取按钮坐标来绘制一条连接它们的线,但它不能按照我想要的方式工作,我是新手,我这样做是否正确?
我在互联网上搜索了连接 2 个控件的线路,但我只想要一个使用坐标连接它们的简单控件。
这是我的代码:
Button btn1 = new Button();
btn1.Content = "Hello";
btn1.Width = 150;
btn1.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
wrapPanel1.Children.Add(btn1);
btn1.PreviewMouseDown += new MouseButtonEventHandler(btn1_MouseDown);
Button btn2 = new Button();
btn2.Content = "World";
btn2.Width = 150;
btn2.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;
btn2.PreviewMouseDown += new MouseButtonEventHandler(btn1_MouseDown);
wrapPanel1.Children.Add(btn2);
private void ShowLocation(ContentControl element)
{
var location = element.PointToScreen(new Point(0, 0));
MessageBox.Show(string.Format(
"{2}'s location is ({0}, {1})",
location.X,
location.Y,
element.Content));
Line redLine = new Line();
redLine.X1 = location.X;
redLine.Y1 = location.Y;
redLine.X2 = 323;
redLine.Y2 = 167;
//Create a red Brush
SolidColorBrush redBrush = new SolidColorBrush();
redBrush.Color = Colors.Red;
//Set Line's width and color
redLine.StrokeThickness = 4;
redLine.Stroke = redBrush;
// Add line to the Grid.
wrapPanel1.Children.Add(redLine);
}
private void btn1_MouseDown(object sender, RoutedEventArgs e)
{
var element = sender as ContentControl;
if (element != null)
{
ShowLocation(element);
}
}
当您注意到 X2 和 Y2 坐标时,我只是随机给它一个数字,但假设 X1 和 Y1 是从按钮中绘制的,但事实并非如此。
这条线出现在远离按钮的其他地方,但我使用的坐标是按钮的坐标。
另外,我必须从 db 动态创建许多按钮,这只是测试,但我被困在这里。
__编辑____
尝试使用 1 个按钮,我意识到当最大化和最小化时,坐标是不同的,这就是它的样子,每次单击按钮生成线条时,按钮似乎都会增加它的高度。
我希望线条从侧面按钮宽度的末端开始,如果不可能,那么按钮与线条重叠会很好,但这可能吗?