我的WPF应用程序中有一个Grid,目前水平和垂直居中,没什么大不了的。但是,我想根据单个网格单元而不是整个网格来居中整个网格。这可能吗?这是我想要实现的一个小例子。我希望红十字会成为中心。 第一张图片显示整个网格(网格是绿色方块)居中,第二张图片显示整个网格根据红十字的单元格居中。这在XAML中是否可行?我没有故意提供任何代码,因为我真的不认为这个问题是必要的,它不像我有错误或者什么不起作用,我不知道如何实现这一点。
答案 0 :(得分:2)
有外部网格,内部网格和应该居中的元素。外部和内部网格具有相等的行和列权重。布局适应调整大小
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="2*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="1" Grid.ColumnSpan="3"
Background="LightGray"
Grid.Row="0" Grid.RowSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Border Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2"
Background="Green"/>
<Border Grid.Row="1" Grid.RowSpan="2" Grid.Column="0" Grid.ColumnSpan="2"
Background="Cyan"/>
</Grid>
</Grid>
答案 1 :(得分:0)
我认为只有当您的UI组件具有固定大小时,才能实现此目的。这是我如何实现您所要求的代码示例。
<Window x:Class="StackStuff.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:StackStuff"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<Grid HorizontalAlignment="Center" VerticalAlignment="Center" Background="Red"
Width="150" Height="100" ClipToBounds="False">
<Border Margin="0,-150,-30,0" BorderBrush="Black" BorderThickness="1" Height="50"
Width="180">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="130"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" BorderThickness="1" BorderBrush="Black"/>
<Border Grid.Column="1" BorderThickness="1" BorderBrush="Black"/>
</Grid>
</Border>
<Border Margin="0,0,-180,0" BorderBrush="Black" BorderThickness="1"
Width="30" Height="100">
</Border>
</Grid>
</DockPanel>
如您所见,它具有所有单元格的固定大小。