Поделиться через


FrameworkElement.Margin Свойство

Определение

Возвращает или задает внешнее поле элемента 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"/>
 

Значение свойства

Предоставляет значения полей для объекта . Значением по умолчанию является толщина по умолчанию со всеми свойствами (измерениями), равными 0.

Примеры

Этот пример задает Margin в коде как часть более крупного сценария создания элемента пользовательского интерфейса во время выполнения, а затем задания различных свойств, связанных с макетом. Это часто делается перед добавлением нового элемента в дерево объектов существующей страницы пользовательского интерфейса XAML. В этом случае несколько свойств 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, а также контейнером макета этого объекта.

Отрицательные значения для измерений полей разрешены, но их следует использовать с осторожностью (и помните, что отрицательные поля могут интерпретироваться по-разному в разных реализациях макета класса). Отрицательные поля обычно обрезают содержимое объекта в этом направлении.

Нецелевых значений для значений полей технически разрешено, но обычно их следует избегать.

Поля и заполнение

Связанная концепция — заполнение. Для объекта и его ограничивающего прямоугольника поле — это дополнительное пространство, которое выделяется за пределами ограничивающего прямоугольника, когда элемент пользовательского интерфейса содержится и отрисовывается. Заполнение — это область внутри ограничивающего прямоугольника, влияющая на макет любого дополнительного содержимого или дочерних объектов внутри элемента. FrameworkElement не определяет свойство заполнения, однако несколько производных классов определяют свойство Padding . К ним относятся следующие объекты.

Применяется к

См. также раздел