导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

FrameworkElement.Margin 属性

2013/12/13

获取或设置 FrameworkElement 的外边距。

Namespace:  System.Windows
程序集:  System.Windows(位于 System.Windows.dll 中)
XMLNS for XAML: 未映射到 xmlns。

public Thickness Margin { get; set; }
<frameworkElement Margin="uniform"/>
- or -
<frameworkElement Margin="left+right,top+bottom"/>
- or -
<frameworkElement Margin="left,top,right,bottom"/>

XAML 值

uniform

一个以逻辑像素为单位度量的值,用于指定统一的 Thicknessuniform 值应用于全部四个 Thickness 属性(LeftTopRightBottom)。

left+right

一个以逻辑像素为单位度量的值,用于指定对称 ThicknessLeftRight

top+bottom

一个以逻辑像素为单位度量的值,用于指定对称 ThicknessTopBottom

left top right bottom

以逻辑像素为单位度量的值,用于指定 Thickness 结构的四个可能的维度属性(LeftTopRightBottom)。

  • 在以上所示的 XAML 语法中,还可以使用空格而不是逗号作为值之间的分隔符。

  • 请参见“备注”,了解影响 Margin 的代码和 XAML 用法的值类型、值范围和边界情况注意事项。

属性值

类型: System.Windows.Thickness
提供对象的边距值。 默认值是所有属性(维度)都等于 0 的默认 Thickness

依赖项属性标识符字段: MarginProperty

边距是当布局创建 UI 时此对象与其他相邻对象之间的空间。 参与布局的其他对象可能是对等对象(如公共父控件的集合中的其他对象),也可能是此对象在可视化树中的父对象。

Margin 可以设置为离散 Thickness 值,而不是统一值,以便能够以非对称方式设置围绕对象的边距。 Thickness 结构本身支持字符串类型的转换,以便您还可以在 XAML 特性语法中指定非对称 Margin。 例如,在 XAML 中,边距指定为 Margin="15,10,0,10" 的对象在左侧、顶部、右侧和底部的边距分别为 15、10、0 和 10 逻辑像素。


<Grid x:Name="LayoutRoot" Background="Coral" Width="350" Height="135" ShowGridLines="True">
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <TextBlock Grid.Column="0" Grid.Row="0" Text="First Name" HorizontalAlignment="Center" VerticalAlignment="Center" />
    <TextBlock Grid.Column="0" Grid.Row="1" Text="Last Name" HorizontalAlignment="Center" VerticalAlignment="Center" />
    <TextBox Grid.Column="1" Grid.Row="0" Margin="15,10,15,10" />
    <TextBox Grid.Column="1" Grid.Row="1" Margin="15,10,15,10" />

</Grid>


下图显示了设置 Margin 属性的效果。

margin and alignment diagram

边距行为和布局

大于 0 的边距值在布局的 ActualWidthActualHeight 外部产生空白。

对于布局中的同级元素而言,边距是累加的;例如,两个在相邻边缘都设置边距 30 的水平或垂直相邻对象之间将具有 60 个逻辑像素的空白。

对于设置边距的对象而言,如果所分配的矩形空间不够大,无法容纳边距加上对象内容区域,则对象通常不会约束指定 Margin 的大小。 在计算布局时,将改为约束内容区域的大小。 同时还要对边距进行约束的唯一一种情况是已经将内容一直约束到零。 不过,此行为由解释 Margin 的特定类型以及该对象的布局容器最终控制。

允许边距维度的值为负,但应小心使用(请注意,不同的类布局实现对于负边距可能有不同的解释)。 负边距通常会按该方向剪辑对象内容。

从技术角度讲,允许边距的值不是整数,但通常应避免这种情况,并且一般通过默认的布局舍入行为来舍入这些值。

边距维度没有规定的上限,所以可以设置一个边距,将对象内容置于 Windows Phone 内容区域之外,以便不在视图中显示对象内容(尽管很少推荐这样做)。

边距和填充

相关概念是填充。 对对象及其边界框来说,边距是当包含 UI 元素并将其呈现时,分配到边界框外部的额外空间。填充是边界框内的区域,并且影响该元素内的任何其他内容或子对象的布局。FrameworkElement 未定义内容模型;因此,用于填充的属性改由确实定义了内容模型的子类定义。 最常见的此类属性是 TextBlock.Padding。 其他属性为 TextBlock.PaddingBorder.Padding。 有关边距和填充之间的关系的更多信息,请参见Windows Phone 的布局

动画处理边距

Windows Phone 目前不支持对边距进行直接动画处理,因为在 Windows Phone 中没有 ThicknessAnimation 类型。Border 具有同样的问题,因为 BorderThickness 还使用 Thickness 类型。 一个可能的解决办法是将元素包装在透明面板中,并对该面板的相关 Double 属性进行动画处理。

下面的示例在 XAML 中为各种元素设置边距。


<Canvas>
    <Rectangle Height="500" Width="480" Margin="0,0,0,0" Stroke="Gray" />
    <InkPresenter x:Name="MyIP" Height="500" Width="480" Background="Transparent" Margin="0,0,0,0"
                  MouseLeftButtonDown="MyIP_MouseLeftButtonDown"
                  MouseMove="MyIP_MouseMove"
                  LostMouseCapture="MyIP_LostMouseCapture"/>
    <Button x:Name="BtPen" Content="Pen" Margin="0,500,0,0" Height="72" Width="100" Click="BtPen_Click" />
    <Button x:Name="BtMarker" Content="Marker" Margin="85,500,0,0" Height="72" Width="140" Click="BtMarker_Click" />
    <Button x:Name="BtHighlighter" Content="Highlight" Margin="210,500,0,0" Height="72" Width="170" Click="BtHighlighter_Click" />
    <Button x:Name="BtEraser" Content="Erase" Margin="365,500,0,0" Height="72" Width="110" Click="BtEraser_Click" />
</Canvas>


下面的示例演示如何通过创建新的内联 Thickness 来在代码中设置 Margin。 此内容在可能需要在代码中设置 Margin 的上下文中演示: 当您创建完整的 UI 元素时(其中,将使用代码而非 XAML 来设置 Margin)。


Button button1 = new Button();
button1.Width = 300;
button1.Height = 80;
StackPanel panel1 = new StackPanel();
panel1.Orientation = System.Windows.Controls.Orientation.Horizontal;
Rectangle rect1 = new Rectangle();
rect1.Width = 200;
rect1.Fill = new SolidColorBrush(Colors.Green);
TextBlock tb3 = new TextBlock();
tb3.Margin = new Thickness(2);
tb3.Text = "Green";
tb3.TextAlignment = TextAlignment.Center;
panel1.Children.Add(tb3);
panel1.Children.Add(rect1);
button1.Content = panel1;
LayoutRoot.Children.Add(button1);


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示:
© 2015 Microsoft