如何设置和获得控件相对于Canvas的位置

本文介绍了如何在WPF中使用Canvas控件进行任意布局,并详细讲解了设置和获取控件相对于Canvas位置的方法,包括Canvas.SetLeft、SetTop、SetRight、SetBottom以及对应的Get方法,通过示例代码展示了其实现,有助于解决后台生成控件的布局问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Canvas是WPF中常用的控件,今天第一次使用,有很多属性都不熟悉,不过用过了的就要记住,下一次就不会再犯愁如何使用啦。
Canvas中的控件可以任意布局,并且能够获得较为精确的位置,那么如果设置控件相对于Canvas的位置呢?如下:
设置位置: Canvas.SetLeft(ControlName, LocationX1);
Canvas.SetTop(ControlName, LocationY1);
Canvas.SetRight(ControlName, LocationX2);
Canvas.SetBottom(ControlName, LocationY2);
获得位置: Canvas.GetLeft(ControlName);
Canvas.GetTop(ControlName);
Canvas.GetRight(ControlName);
Canvas.GetBottom(ControlName);

简单的属性设置,却帮了我的大忙,成功的解决了按钮后台生成并自动布局的问题,本着分享的原则,代码如下:

  private void AddCanvasControl(List<string> aTypeStrList)
        {
            int aLocationX = 0;
            int aLocationY = 0;
            rCanvas.Children.Clear();
            foreach (string aStrType in aTypeStrList)
            {
                Button aBtn = new Button();
                aBtn.Content = aStrType;
                aBtn.Height = 20;
                Font f = new Font("SimSun", 7F, System.Drawing.FontStyle.Regular);
                System.Drawing.Size aSize = System.Windows.Forms.TextRenderer.MeasureText(aStrType, f); //获得字符在控件中显示的尺寸
                aBtn.Width = aSize.Width + 20;
                aBtn.HorizontalAlignment = HorizontalAlignment.Left;
                rCanvas.Children.Add(aBtn);
                if (aLocationX + aBtn.Width > rCanvas.RenderSize.Width)
                {
                    aLocationY += 25;
                    aLocationX = 0;
                }
                Canvas.SetLeft(aBtn, aLocationX); //设置按钮在容器中的位置
                Canvas.SetTop(aBtn, aLocationY);
                aLocationX += (int)aBtn.Width + 10;
            }
        }

加入测试代码:

       private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            List<string> aStrList = new List<string>();
            aStrList.Add("Canvas");
            aStrList.Add("RenderSize");
            aStrList.Add("SetResourceReference");
            aStrList.Add("TextRenderer.MeasureText");
            aStrList.Add("学习");
            aStrList.Add("WPF博大精深");
            aStrList.Add("button自动布局");
            aStrList.Add("button自动大小");
            aStrList.Add("字符串");
            AddCanvasControl(aStrList);
        }

效果如下:
这里写图片描述

第一次发博文,希望大家多多鼓励。以后我会在CSDN上多发博文,多与大家交流经验,让自己技术成长得更快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值