我假设C#margin属性的含义与CSS中类似-控件外部的间距。 但是,无论我输入什么值,保证金值似乎都被忽略了。
然后,我在SDK上阅读:
Setting the Margin property on a
docked control has no effect on the
distance of the control from the the
edges of its container.
考虑到我要在窗体上放置控件,或者可能将它们停靠在窗体上,Margin属性会给我带来什么?
就像Philip Rieck所说的那样,margin属性仅受执行布局的容器控件的尊重。下面的示例可以非常清楚地说明TableLayoutPanel如何尊重Margin属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
TableLayoutPanel pnl = new TableLayoutPanel();
pnl.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));
pnl.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));
pnl.Dock = DockStyle.Fill;
this.Controls.Add(pnl);
Button btn1 = new Button();
btn1.Text ="No margin";
btn1.Dock = DockStyle.Fill;
Button btn2 = new Button();
btn2.Margin = new Padding(25);
btn2.Text ="Margin";
btn2.Dock = DockStyle.Fill;
pnl.Controls.Add(btn1, 0, 0);
pnl.Controls.Add(btn2, 1, 0);
}
}
} |
我相信唯一尊重此属性的.NET 2.0内置控件是FlowLayoutPanel和TableLayoutPanel;希望第三方组件也尊重它。在其他情况下,它基本上没有作用。
您的控制主机(例如,Panel)正在使用的任何布局引擎都会使用margin属性,而布局引擎认为合适。但是,就像您假设的那样,它最好用于间隔。只需阅读该特定布局引擎的文档即可。
例如,在使用FlowLayoutPanel或TableLayoutPanel时,可以非常方便-减少默认的填充或将内容空间缩小。显然,如果编写自定义布局提供程序,则可以使用边距,但您认为合适。
如果您不使用布局容器,而是手动放置控件,则Control.Margin属性在设计时也可能很有用。
它会影响出现对齐线的手动拖动控件之间的距离。
例如。对于文本框的默认边距值为3,您将具有以下对齐线:
对于10的边距-这些(两种情况下标签的边距均为3):
因此,如果您对UI有一些严格的指导原则,则只需根据需要设置边距,然后将控件拖动到对齐线。