【问题标题】:Setting Margin in C# WPF Application在 C# WPF 应用程序中设置边距
【发布时间】:2017-01-12 08:29:35
【问题描述】:

如何在 WPF 中设置控件的边距?我曾经使用过 WinForms,并希望将其转换为 WPF。

所以,我创建了一个新的 WPF 应用程序,从 MainWindow 中删除了 Grid,添加了一个 Canvas,并在 Canvas 上添加了两个标签。我想在标签周围设置一个边距,但是一旦我设置它,比如 20,然后尝试移动它们以检查它是否有效,标签的边距属性将值重置为 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>

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

【问题讨论】:

  • 请分享您的代码。
  • @AliTor 当然,你特别想看什么?生成的 XAML?
  • 您是否在 WPF 设计器中移动标签?
  • @Cyferka 是的,我是。
  • @jon,欢迎使用 WPF。作为一个正在恢复的 Winforms 瘾君子,我可以告诉你 WPF 范式一开始是没有意义的。不过,一旦习惯了,就再也回不去了。您需要放弃 Canvas 和 Labels 并返回到提供的 Grid 并检查 TextBlock 控件而不是 Labels。 Grid 用于保存控件,Canvas 仅用于绘制(线条和圆圈等)。

标签: c# wpf user-interface


【解决方案1】:

看起来问题出在标签位于画布内时。我在 Grid 中添加了示例,它按预期工作,在移动标签时会重新计算 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 设计器中的元素。您将获得对代码的更多控制权。

【讨论】:

    猜你喜欢
    • 2017-07-14
    • 2011-10-25
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-03-08
    • 1970-01-01
    相关资源
    最近更新 更多