WPF Grid 列对齐方式:从第一到右,从第二到左

Posted

技术标签:

【中文标题】WPF Grid 列对齐方式:从第一到右,从第二到左【英文标题】:WPF Grid column alignment: first to right, second to left 【发布时间】:2018-04-20 01:08:33 【问题描述】:

我的 WPF 应用程序中有一个网格。此网格有两列和一行。

现在,我正在尝试将第一列内容向右对齐,第二列内容向左对齐,如下所示:

-----------------------------------------------------
|                ProgressControlSpinner|"Loading..."|
-----------------------------------------------------

相反,我得到:

-----------------------------------------------------
|ProgressControlSpinner|"Loading..."                |
-----------------------------------------------------

请注意,我希望第二列自动调整为文本宽度。 此网格也应扩展到包含它的外部网格列。

我的网格如下:

<Grid x:Name="MyGrid" Grid.Column="1" Margin="3" Visibility="Collapsed">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="auto"/>
    </Grid.ColumnDefinitions>                    
    <controls:ProgressControlSpinner Grid.Column="0" Width="20" Height="20" HorizontalAlignment="Right"/>
    <TextBlock Margin="3 0 0 0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Left" Text="Loading..." />
</Grid>

注意:此网格包含在另一个外部网格中。

【问题讨论】:

Xaml 是正确的。你在代码隐藏中做什么?该网格是外部容器的子级,可能存在问题。第二个 screenshot 上的空白可能属于它(您可以设置Background 进行检查)。你能显示更多的 xaml 吗? @Sinatr 是的,问题出在外部网格中。列定义宽度不正确。看我的回答。 【参考方案1】:

我已经解决了。在定义包含内部网格的列的宽度时,我的问题出在外部网格中。

我有:

<Grid Grid.Column="0" Grid.Row="0" Margin="10 10 10 5" HorizontalAlignment="Stretch">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto"></ColumnDefinition>
        <ColumnDefinition Width="auto"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <Grid x:Name="MyGrid" Grid.Column="1" Margin="3" Visibility="Collapsed">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="auto"/>
        </Grid.ColumnDefinitions>                    
        <controls:ProgressControlSpinner Grid.Column="0" Width="20" Height="20" HorizontalAlignment="Right"/>
        <TextBlock Margin="3 0 0 0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Left" Text="Loading..." />
    </Grid>

</Grid>

正确的是:

<Grid Grid.Column="0" Grid.Row="0" Margin="10 10 10 5" HorizontalAlignment="Stretch">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
        <ColumnDefinition Width="auto"></ColumnDefinition>
    </Grid.ColumnDefinitions>


    <Grid x:Name="MyGrid" Grid.Column="1" Margin="3" Visibility="Collapsed">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="auto"/>
        </Grid.ColumnDefinitions>                    
        <controls:ProgressControlSpinner Grid.Column="0" Width="20" Height="20" HorizontalAlignment="Right"/>
        <TextBlock Margin="3 0 0 0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Left" Text="Loading..." />
    </Grid>

</Grid>

【讨论】:

以上是关于WPF Grid 列对齐方式:从第一到右,从第二到左的主要内容,如果未能解决你的问题,请参考以下文章

从第二列开始填充数据表

顺时针和逆时针螺旋打印二维数组(行列式)

组合2个字符串的最快方法,将字符串从第二列交错到整个数据帧中的第一列

WPF:当第二列内容折叠时,DataGrid 不会扩展以占据 Grid 的两列

GridLayoutManager均分网格

在SAP abap中。从第一个ALV显示根据筛选条件搜索出第二个ALV的显示数据(内表不一样)点击返回一直转圈