在c# WPF应用程序中设置边距

本文关键字:置边距 应用程序 WPF | 更新日期: 2023-09-27 18:05:33

如何在WPF中设置控件的边距?我以前使用的是WinForms,现在希望转换成WPF。

所以,我创建了一个新的WPF应用程序,删除了主窗口中的网格,添加了一个画布,并在画布上添加了两个标签。我想在标签周围设置一个边距,但是一旦我设置了它,比如说20,然后尝试移动它们来检查它是否有效,Label的Margin属性将值重置为0。我还能像在WinForms中那样在WPF中这样做吗?

谢谢!

编辑:

希望这是你感兴趣的代码。

因此,我在属性选项卡中更改了标签的边距值。如下所示:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApplication1"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Canvas HorizontalAlignment="Left" Height="173" Margin="87,62,0,0" VerticalAlignment="Top" Width="205" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
    <Label x:Name="label" Content="Label" Canvas.Left="51" Canvas.Top="47" Margin="20"/>
    <Label x:Name="label1" Content="Label" Canvas.Left="104" Canvas.Top="125" Margin="20"/>
</Canvas></Window>

然后,我拖动一个标签,它会自动变成这样:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApplication1"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Canvas HorizontalAlignment="Left" Height="173" Margin="87,62,0,0" VerticalAlignment="Top" Width="205" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
    <Label x:Name="label" Content="Label" Canvas.Left="51" Canvas.Top="47" Margin="20"/>
    <Label x:Name="label1" Content="Label" Canvas.Left="129" Canvas.Top="101"/>
</Canvas> </Window>

如果我拖动另一个标签,它也会"重置"为零

在c# WPF应用程序中设置边距

看起来问题是当标签在画布内。我添加了网格的例子,它像预期的那样工作,当一个标签被移动时,Margin属性被重新计算。

<Grid>
    <Label x:Name="label1" Content="Label" Margin="20" VerticalAlignment="Top" Width="200"/>
</Grid>

或者,您可以使用Padding属性,如果这对您有用的话。无论你如何移动标签,它都将保持在20。

<Canvas HorizontalAlignment="Left" Height="173" Margin="87,62,0,0" VerticalAlignment="Top" Width="205" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
    <Label x:Name="label" Content="Label" Canvas.Top="40" Canvas.Left="21" Padding="20"/>
    <Label x:Name="label1" Content="Label" Canvas.Left="32" Canvas.Top="125"/>
</Canvas>

但是,我强烈建议只编辑源代码,不要触摸WPF设计器中的元素。