根据WPF中的Grid Cell中心网格

时间:2016-11-08 11:40:57

标签: c# wpf xaml

我的WPF应用程序中有一个Grid,目前水平和垂直居中,没什么大不了的。但是,我想根据单个网格单元而不是整个网格来居中整个网格。这可能吗?这是我想要实现的一个小例子。我希望红十字会成为中心。 enter image description here 第一张图片显示整个网格(网格是绿色方块)居中,第二张图片显示整个网格根据红十字的单元格居中。这在XAML中是否可行?我没有故意提供任何代码,因为我真的不认为这个问题是必要的,它不像我有错误或者什么不起作用,我不知道如何实现这一点。

2 个答案:

答案 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>

screen shot

答案 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>

如您所见,它具有所有单元格的固定大小。