Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF网格布局和单元格内容边距_C#_Wpf_Grid - Fatal编程技术网

C# WPF网格布局和单元格内容边距

C# WPF网格布局和单元格内容边距,c#,wpf,grid,C#,Wpf,Grid,我正在处理一个WPF控件,它的内容是网格。我对WPF比较陌生,所以我想知道下面的方法是否正确 我在网格中放置了两个标签,都位于同一列但相邻的行中: <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="UntitledProject8.Window1" x:Name="W

我正在处理一个WPF控件,它的内容是网格。我对WPF比较陌生,所以我想知道下面的方法是否正确

我在网格中放置了两个标签,都位于同一列但相邻的行中:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="UntitledProject8.Window1"
x:Name="Window"
Title="Window1"
Width="200" Height="200">

<Grid x:Name="LayoutRoot">
    <Grid HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="100"/>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Label Grid.Row="0" Content="1.23" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
    <Label Grid.Row="1" Content="45" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Top"/>
</Grid>

我设置标签的垂直对齐方式,以便第0行上的标签与底部对齐,第1行上的标签与顶部对齐

现在,这接近我想要的,但是我需要第1行标签的实际文本更接近第0行标签的文本。为此,我将第1行中标签的边距设置为负值:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="UntitledProject8.Window1"
x:Name="Window"
Title="Window1"
Width="200" Height="200">

<Grid x:Name="LayoutRoot">
    <Grid HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="100"/>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Label Grid.Row="0" Content="1.23" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
    <Label Grid.Row="1" Content="45" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,-20,0,0"/>
</Grid>

这样做对吗?尽管我上面的示例过于简单,但随着网格内容的增长和变得更加复杂(例如包括其他布局容器),为控件边距设置不同的值是否是使相邻单元格更近或更远的正确方法

我只是有点担心,因为我正在尽最大努力避免硬编码任何类型的“设计器”值,就像我在使用WinForms时所做的那样(例如为位置设置精确坐标,为大小设置值),并且希望让布局管理器来处理它。然而,设定利润率似乎是唯一的出路


谢谢你的帮助:)

看起来不错!唯一让我有点措手不及的是顶部边距的-20(而不是底部边距的20,它应该做同样的事情),但我只是为了清楚起见才改变它

需要注意的主要问题是选择的容器,哪个网格肯定适合您。另一个特点是,当拉伸栅格时,元素之间的距离将按比例增长(可能是您想要的)。网格的唯一缺点是它不是最有效的。主要是因为你可以用它做很多事情

您可以使用画布(具有拉伸功能)完成与上述相同的操作,或者如果您不想拉伸距离,可以尝试使用stackpanel,这也将比网格更有效。还有一些其他面板,但了解它们能做什么(以及它们的性能如何)真的很有帮助,尤其是当必须创建更复杂的布局时


至于边距,是的,除了设置宽度和高度,这些都是设置间距的标准方法。

看起来不错!唯一让我有点措手不及的是顶部边距的-20(而不是底部边距的20,它应该做同样的事情),但我只是为了清楚起见才改变它

需要注意的主要问题是选择的容器,哪个网格肯定适合您。另一个特点是,当拉伸栅格时,元素之间的距离将按比例增长(可能是您想要的)。网格的唯一缺点是它不是最有效的。主要是因为你可以用它做很多事情

您可以使用画布(具有拉伸功能)完成与上述相同的操作,或者如果您不想拉伸距离,可以尝试使用stackpanel,这也将比网格更有效。还有一些其他面板,但了解它们能做什么(以及它们的性能如何)真的很有帮助,尤其是当必须创建更复杂的布局时

至于边距,是的,除了设置宽度和高度,这些都是设置间距的标准方法