您的位置:首页 > 其它

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

2015-02-05 15:29 246 查看
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上多发博文,多与大家交流经验,让自己技术成长得更快。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  canvas 布局 wpf