【问题标题】:Wpf Form Alignment & ResizeWpf 表单对齐和调整大小
【发布时间】:2017-01-29 02:12:21
【问题描述】:

我正在尝试在 wpf 中创建一个表单,但我遇到了一些对齐问题。

这种形式很特别,因为它是由一组具有不同列数的行组成的。

这是我目前得到的:

我有 2 个问题。

1) 对齐

如果两行的列数不同,如何将一行中的文本框与下方行中的文本框对齐。

我想像这样对齐它:

T1 的左侧到 T3 的左侧,T2 的右侧到 T3 的右侧。 在调整大小时,T3 应该会拉伸,并且 T1 和 T2 会彼此靠近。

2) 调整大小

每个列的高度是父网格高度<RowDefinition Height="62*"/> 的百分比,并且 TextBoxes 和 Labes 与 VerticalAlignment="Stretch" 一起浮动,我想如果我会这样做,当我降低表单的高度时 TextBoxes 会更接近到彼此,但他们没有,并且一些文本框被从屏幕上剪掉了。

这是 XAML 代码:

<UserControl x:Class="my.Controles.Clientes.ControlVerClientes"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="750" d:DesignWidth="1900" Loaded="ControlVerClientes_Load">
    <Grid Background="Gold" >
        <Grid Name="SubInterfazAdministrarClientes">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="55*"    />
                <ColumnDefinition Width="100*"    />
                <ColumnDefinition Width="75*"    />
            </Grid.ColumnDefinitions>
            <Grid Grid.Column ="0">
                <Grid Margin="10">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="40"/>
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <TextBox x:Name="TextBoxBuscarCliente" Grid.Row="0" TextChanged="TextBoxBuscarCliente_Change"/>
                    <ListBox x:Name="ListBoxBuscarClientes" Grid.Row="1" Margin="0,20,0,0" SelectionChanged="ListBoxBuscarClientes_SelectionChanged"/>
                </Grid>
            </Grid>
            <Grid Grid.Column ="1">
                <Grid HorizontalAlignment="Stretch" Height="680" Margin="10,70,0,0" VerticalAlignment="Stretch" >
                    <Grid.RowDefinitions>
                        <RowDefinition Height="62*"/>
                        <RowDefinition Height="61*"/>
                        <RowDefinition Height="62*"/>
                        <RowDefinition Height="61*"/>
                        <RowDefinition Height="62*"/>
                        <RowDefinition Height="61*"/>
                        <RowDefinition Height="120*"/>
                        <RowDefinition Height="65*"/>
                    </Grid.RowDefinitions>

                    <Grid Grid.Row="0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="135*"/>
                            <ColumnDefinition Width="148*"/>
                        </Grid.ColumnDefinitions>
                        <Grid Grid.Column="0">
                            <Label Content="Nombre" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" Height="24" Width="76" />
                            <TextBox HorizontalAlignment="Stretch" Height="24" Margin="0,0,0,0" TextWrapping="Wrap" Text="{Binding ClienteActual.Nombre}" VerticalAlignment="Stretch" Width="220" />
                        </Grid>
                        <Grid Grid.Column="1">
                            <Label Content="Apellido" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch"/>
                            <TextBox HorizontalAlignment="Stretch" Height="24" Margin="0,0,0,0" TextWrapping="Wrap" Text="{Binding ClienteActual.Apellido}" VerticalAlignment="Stretch" Width="220"/>
                        </Grid>
                    </Grid>

                    <Grid  Grid.Row="1">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="135*"/>
                            <ColumnDefinition Width="148*"/>
                        </Grid.ColumnDefinitions>
                        <Grid Grid.Column="0">
                            <Label Content="Documento" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch"/>
                            <TextBox HorizontalAlignment="Stretch" Height="22" Margin="0,0,0,0" TextWrapping="Wrap" Text="{Binding ClienteActual.Documento}" VerticalAlignment="Stretch" Width="220"/>
                        </Grid>
                        <Grid Grid.Column="1">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition />
                                <ColumnDefinition />
                            </Grid.ColumnDefinitions>

                            <Grid Grid.Column="0">
                                <Label Content="Descuento Fijo" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" Width="124"/>
                                <TextBox HorizontalAlignment="Stretch" Height="23" Margin="0,0,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Stretch" Width="150" PreviewTextInput="TextboxValidacionNumerica"/>
                                <Label Content="%" HorizontalAlignment="Stretch" Margin="130,0,0,0" VerticalAlignment="Stretch" Height="23" Width="19" RenderTransformOrigin="0.395,0.294" Background="Transparent"/>
                            </Grid>
                            <Grid Grid.Column="1">
                                <Label Content="Estado" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" Width="124"/>
                                <ComboBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="23" Width="150" Text="{Binding Estado}" DisplayMemberPath="Estado" />
                            </Grid>
                        </Grid>
                    </Grid>


                    <Grid Grid.Row="2">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="135*"/>
                            <ColumnDefinition Width="148*"/>
                        </Grid.ColumnDefinitions>
                        <Grid Grid.Column="0">
                            <Label Content="Telefono 1" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" Height="23"/>
                            <TextBox HorizontalAlignment="Stretch" Height="23" Margin="0,0,0,0" TextWrapping="Wrap" Text="{Binding ClienteActual.Telefono1}" VerticalAlignment="Stretch" Width="220"/>
                        </Grid>
                        <Grid Grid.Column="1">
                            <Label Content="Telefono 2" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch"  Height="23"/>
                            <TextBox HorizontalAlignment="Stretch" Height="24" Margin="0,0,0,0" TextWrapping="Wrap" Text="{Binding ClienteActual.Telefono2}" VerticalAlignment="Stretch" Width="220"/>
                        </Grid>
                    </Grid>

                    <Grid Grid.Row="3">
                        <Label Content="Email" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch"  Height="23"/>
                        <TextBox HorizontalAlignment="Stretch" Height="24" Margin="0,0,0,0" TextWrapping="Wrap" Text="{Binding ClienteActual.Email}" VerticalAlignment="Stretch" Width="578"/>
                    </Grid>

                    <Grid Grid.Row="4">
                        <Label Content="Direccion" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch"/>
                        <TextBox HorizontalAlignment="Stretch" Height="22" Margin="0,0,0,0" TextWrapping="Wrap" Text="{Binding ClienteActual.Direccion}" VerticalAlignment="Stretch" Width="578"/>
                    </Grid>


                    <Grid Grid.Row="5">
                        <Label Content="Hotel/Habitacion" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch"/>
                        <TextBox HorizontalAlignment="Stretch" Height="22" Margin="0,0,0,0" TextWrapping="Wrap" Text="{Binding ClienteActual.Hotel_Habitacion}" VerticalAlignment="Stretch" Width="578"/>
                    </Grid>

                    <Grid Grid.Row="6">
                        <Label Content="Contacto" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" Width="138"/>
                        <TextBox HorizontalAlignment="Stretch" Height="96" Margin="0,0,0,0" TextWrapping="Wrap" Text="{Binding ClienteActual.Contacto}" VerticalAlignment="Stretch" Width="578"/>
                    </Grid>
                    <Grid Grid.Row="7">
                        <Label Content="{Binding ClienteActual.InfoCreacion}" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" Width="578"/>
                    </Grid>


                </Grid>

            </Grid>
        </Grid>
    </Grid>
</UserControl>

另外,如果您知道更好的方法来做到这一点,我很想听听。 非常感谢!!

【问题讨论】:

    标签: wpf resize alignment


    【解决方案1】:

    1.对齐

    为此,您需要删除Width,设置HorizontalAlignment = Strecth,并匹配T2和T3的右边距。

    2。推荐布局

    <Window ...>
        <Grid Background="Gold" >
            <Grid Name="SubInterfazAdministrarClientes">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="34*"    />
                    <ColumnDefinition Width="102*"    />
                    <ColumnDefinition Width="37*"    />
                </Grid.ColumnDefinitions>
                <Grid Grid.Column ="0">
                    <Grid Margin="10">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="40"/>
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <TextBox x:Name="TextBoxBuscarCliente" Grid.Row="0" />
                        <ListBox x:Name="ListBoxBuscarClientes" Grid.Row="1" Margin="0,20,0,0" />
                    </Grid>
                </Grid>
                <Grid Grid.Column ="1">
                    <Grid HorizontalAlignment="Stretch" Height="680" Margin="10,70,0,0" VerticalAlignment="Stretch" >
                        <Grid.RowDefinitions>
                            <RowDefinition Height="62*"/>
                            <RowDefinition Height="61*"/>
                            <RowDefinition Height="62*"/>
                            <RowDefinition Height="61*"/>
                            <RowDefinition Height="62*"/>
                            <RowDefinition Height="61*"/>
                            <RowDefinition Height="120*"/>
                            <RowDefinition Height="65*"/>
                        </Grid.RowDefinitions>
    
                        <Grid Grid.Row="0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="135*"/>
                                <ColumnDefinition Width="148*"/>
                            </Grid.ColumnDefinitions>
                            <Grid Grid.Column="0">
                                <StackPanel Margin="10">
                                    <Label Content="Nombre"/>
                                    <TextBox TextWrapping="Wrap" Text="{Binding ClienteActual.Nombre}"/>
                                </StackPanel>
                            </Grid>
                            <Grid Grid.Column="1">
                                <StackPanel Margin="10">
                                    <Label Content="Apellido"  />
                                    <TextBox HorizontalAlignment="Stretch" TextWrapping="Wrap" Text="{Binding ClienteActual.Apellido}"/>
                                </StackPanel>
                            </Grid>
                        </Grid>
    
                        <Grid  Grid.Row="1">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="135*"/>
                                <ColumnDefinition Width="148*"/>
                            </Grid.ColumnDefinitions>
                            <Grid Grid.Column="0">
                                <StackPanel Orientation="Vertical" Margin="10">
                                    <Label Content="Documento" />
                                    <TextBox TextWrapping="Wrap" Text="{Binding ClienteActual.Documento}"/>
                                </StackPanel>
                            </Grid>
                            <Grid Grid.Column="1">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="108*" />
                                    <ColumnDefinition Width="91*" />
                                </Grid.ColumnDefinitions>
    
                                <Grid Grid.Column="0">
                                    <StackPanel Orientation="Vertical" Margin="10">
                                        <Label Content="Descuento Fijo"/>
                                        <TextBox  TextWrapping="Wrap" Text="0" />
                                        <Label Content="%"  Background="Transparent" />
                                    </StackPanel>
                                </Grid>
                                <Grid Grid.Column="1">
                                    <StackPanel Margin="10">
                                        <Label Content="Estado" />
                                        <ComboBox Text="{Binding Estado}" DisplayMemberPath="Estado" />
                                    </StackPanel>
                                </Grid>
                            </Grid>
                        </Grid>
    
                        <Grid Grid.Row="2">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="135*"/>
                                <ColumnDefinition Width="148*"/>
                            </Grid.ColumnDefinitions>
                            <Grid Grid.Column="0">
                                <StackPanel Orientation="Vertical" Margin="10">
                                    <Label Content="Telefono 1" />
                                    <TextBox TextWrapping="Wrap" Text="{Binding ClienteActual.Telefono1}" />
                                </StackPanel>
                            </Grid>
                            <Grid Grid.Column="1">
                                <StackPanel Margin="10">
                                    <Label Content="Telefono 2"/>
                                    <TextBox Text="{Binding ClienteActual.Telefono2}"/>
                                </StackPanel>
                            </Grid>
                        </Grid>
    
                        <Grid Grid.Row="3">
                            <StackPanel Margin="10">
                                <Label Content="Email" DockPanel.Dock="Left" />
                                <TextBox DockPanel.Dock="Left" TextWrapping="Wrap" Text="{Binding ClienteActual.Email}" />
                            </StackPanel>
                        </Grid>
    
                        <Grid Grid.Row="4">
                            <StackPanel Margin="10">
                                <Label Content="Direccion" />
                                <TextBox TextWrapping="Wrap" Text="{Binding ClienteActual.Direccion}" />
                            </StackPanel>
                        </Grid>
    
                        <Grid Grid.Row="5">
                            <StackPanel Margin="10">
                                <Label Content="Hotel/Habitacion"/>
                                <TextBox TextWrapping="Wrap" Text="{Binding ClienteActual.Hotel_Habitacion}" />
                            </StackPanel>
                        </Grid>
    
                        <Grid Grid.Row="6">
                            <StackPanel Margin="10">
                                <Label Content="Contacto"/>
                                <TextBox Height="96" TextWrapping="Wrap" Text="{Binding ClienteActual.Contacto}"/>
                            </StackPanel>
                        </Grid>
    
                        <Grid Grid.Row="7">
                            <Label Content="{Binding ClienteActual.InfoCreacion}" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" Width="578"/>
                        </Grid>
    
                    </Grid>
    
                </Grid>
            </Grid>
        </Grid>
    </Window>
    

    如果您希望在调整 Window 大小时折叠行高,那可能不是最好的做法,因为必须有一些有意义的高度,低于该高度表单将变得无用。您可以试验MinHeight 值。

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      相关资源
      最近更新 更多