FrameworkElement.Margin 属性  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置 FrameworkElement 的外部边距。
public:
 property Thickness Margin { Thickness get(); void set(Thickness value); };Thickness Margin();
void Margin(Thickness value);public Thickness Margin { get; set; }var thickness = frameworkElement.margin;
frameworkElement.margin = thickness;Public Property Margin As Thickness<frameworkElement Margin="uniform"/>
- or -
<frameworkElement Margin="left+right,top+bottom"/>
- or -
<frameworkElement Margin="left,top,right,bottom"/>
 
属性值
为 对象提供边距值。 默认值是默认 的 Thickness ,其所有属性 (维度) 等于 0。
示例
此示例将代码中的 Margin 设置为在运行时创建 UI 元素,然后设置各种与布局相关的属性的较大方案的一部分。 这通常在将新元素添加到现有 XAML UI 页面的对象树之前完成。 在这种情况下,使用使用统一值构造函数创建的新 Thickness 设置多个 Margin 属性。
    public Page()
    {
        InitializeComponent();
        LayoutDesign();
    }
    private void LayoutDesign()
    {
        //Create Stackpanel for ListBox Control and its description
        StackPanel DeptStackPanel = new StackPanel();
        DeptStackPanel.Margin = new Thickness(10);
        LayoutRoot.Children.Add(DeptStackPanel);
        Grid.SetColumn(DeptStackPanel, 1);
        Grid.SetRow(DeptStackPanel, 1);
        TextBlock DeptListHeading = new TextBlock();
        DeptListHeading.Text = "Department";
        ListBox DeptList = new ListBox();
        DeptList.Items.Add("Finance");
        DeptList.Items.Add("Marketing");
        DeptList.Items.Add("Human Resources");
        DeptList.Items.Add("Payroll");
        DeptStackPanel.Children.Add(DeptListHeading);
        DeptStackPanel.Children.Add(DeptList);
        //Create StackPanel for buttons
        StackPanel ButtonsStackPanel = new StackPanel();
        ButtonsStackPanel.Margin = new Thickness(10);
        ButtonsStackPanel.Orientation = Orientation.Horizontal;
        ButtonsStackPanel.HorizontalAlignment = HorizontalAlignment.Center;
        LayoutRoot.Children.Add(ButtonsStackPanel);
        Grid.SetColumn(ButtonsStackPanel, 0);
        Grid.SetRow(ButtonsStackPanel, 2);
        Grid.SetColumnSpan(ButtonsStackPanel, 2);
        Button BackButton = new Button();
        BackButton.Content = "Back";
        BackButton.Width = 100;
        Button CancelButton = new Button();
        CancelButton.Content = "Cancel";
        CancelButton.Width = 100;
        Button NextButton = new Button();
        NextButton.Content = "Next";
        NextButton.Width = 100;
        ButtonsStackPanel.Children.Add(BackButton);
        ButtonsStackPanel.Children.Add(CancelButton);
        ButtonsStackPanel.Children.Add(NextButton);
        BackButton.Margin = new Thickness(10);
        CancelButton.Margin = new Thickness(10);
        NextButton.Margin = new Thickness(10);
    }
}
Partial Public Class Page
    Inherits UserControl
    Public Sub New()
        InitializeComponent()
        LayoutDesign()
    End Sub
    Private Sub LayoutDesign()
        'Create Stackpanel for ListBox Control and its description 
        Dim DeptStackPanel As New StackPanel()
        DeptStackPanel.Margin = New Thickness(10)
        LayoutRoot.Children.Add(DeptStackPanel)
        Grid.SetColumn(DeptStackPanel, 1)
        Grid.SetRow(DeptStackPanel, 1)
        Dim DeptListHeading As New TextBlock()
        DeptListHeading.Text = "Department"
        Dim DeptList As New ListBox()
        DeptList.Items.Add("Finance")
        DeptList.Items.Add("Marketing")
        DeptList.Items.Add("Human Resources")
        DeptList.Items.Add("Payroll")
        DeptStackPanel.Children.Add(DeptListHeading)
        DeptStackPanel.Children.Add(DeptList)
        'Create StackPanel for buttons 
        Dim ButtonsStackPanel As New StackPanel()
        ButtonsStackPanel.Margin = New Thickness(10)
        ButtonsStackPanel.Orientation = Orientation.Horizontal
        ButtonsStackPanel.HorizontalAlignment = HorizontalAlignment.Center
        LayoutRoot.Children.Add(ButtonsStackPanel)
        Grid.SetColumn(ButtonsStackPanel, 0)
        Grid.SetRow(ButtonsStackPanel, 2)
        Grid.SetColumnSpan(ButtonsStackPanel, 2)
        Dim BackButton As New Button()
        BackButton.Content = "Back"
        BackButton.Height = 30
        BackButton.Width = 100
        Dim CancelButton As New Button()
        CancelButton.Content = "Cancel"
        CancelButton.Height = 30
        CancelButton.Width = 100
        Dim NextButton As New Button()
        NextButton.Content = "Next"
        NextButton.Height = 30
        NextButton.Width = 100
        ButtonsStackPanel.Children.Add(BackButton)
        ButtonsStackPanel.Children.Add(CancelButton)
        ButtonsStackPanel.Children.Add(NextButton)
        BackButton.Margin = New Thickness(10)
        CancelButton.Margin = New Thickness(10)
        NextButton.Margin = New Thickness(10)
    End Sub
End Class
注解
边距行为和布局
大于 0 的边距值在对象的 ActualWidth 和 ActualHeight 之外应用空间。
布局中对等对象的边距是累加的;例如,两个水平或垂直相邻的对象在相邻边缘上设置了 30 个边距,它们之间将有 60 像素的空间。
如果分配的矩形空间不足以容纳边距加上对象的内容区域,则设置了边距的对象通常不会限制指定边距的大小。 在计算布局时,内容区域将受到约束。 限制边距的唯一情况也是,如果内容已一直限制为零。 但是,此行为最终由解释 Margin 的特定类型以及该对象的布局容器控制。
允许使用边距维度的负值,但应谨慎使用 (,请注意,不同的类布局实现) 可以对负边距进行不同的解释。 负边距通常按该方向剪裁对象的内容。
边距值的非整型值在技术上是允许的,但通常应避免使用。
边距和填充
一个相关的概念是填充。 对于对象及其边界框,边距是在包含和呈现 UI 元素时分配给边界框外部的额外空间。 填充是边界框内的区域,会影响元素内任何其他内容或子对象的布局。 FrameworkElement 不定义填充属性,但是,几个派生类确实定义了 Padding 属性。 其中包括:
- Border.Padding
- Control.Padding
- TextBlock.Padding
- RichTextBlock.Padding
- ItemsPresenter.Padding 有关边距与填充之间的关系的详细信息,请参阅 对齐、边距和填充 或 使用 XAML 定义布局。