我正在开发一个内容为网格的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时所做的那样(例如为位置设置精确的坐标和尺寸值)并且我想让布局管理员来处理它。但是,设置边距似乎是唯一的方法。
感谢您的帮助:)
答案 0 :(得分:1)
看起来不错!唯一让我措手不及的是上边距的-20(而不是底部的20,它应该做同样的事情),但我只会为了清晰而改变它。
要注意的主要是选择的容器,Grid绝对适合您。这样做的另一个特点是,当您拉伸网格时,元素之间的距离将按比例增长(可能是您想要的)。网格的唯一弱点是它不是最有效的。主要是因为你可以用它做很多事情。
您可以使用画布(使用拉伸功能)完成与上述相同的操作,或者如果您不希望拉伸距离,则可以尝试使用堆叠面板,这也将比网格更有效。还有一些其他面板,但是熟悉它们可以做什么(以及它们的表现如何)真的很有帮助,特别是在必须创建更复杂的布局时。
关于边距,是的,除了设置宽度和高度外,还是设置间距的标准方法。