Автоматическое изменение размера нескольких текстовых полей в DockPanel

Я надеялся, что здесь мне кто-нибудь поможет. У меня есть 2 текстовых поля и кнопка в док-панели, и я хотел бы, чтобы 2 текстовых поля растягивались и сжимались в зависимости от размера окна.

У меня есть док-панель, которая содержит кучу кнопок меню слева, и в этой док-станции у меня есть еще одна док-станция с двумя текстовыми полями и кнопкой. Когда я изменяю размер главного окна, я хочу, чтобы правая док-станция сжимала текстовые поля, чтобы правая док-станция просто не исчезла при ударе о левую док-станцию. Имеет ли это смысл?

    <DockPanel LastChildFill="False">
        <Button DockPanel.Dock="Left" Margin="5, 0, 0, 0" Name="button1" Content="1" FontSize="10" Foreground="#FF565656" Width="64" Height="40"/>
        <Button DockPanel.Dock="Left" Margin="5, 0, 0, 0" Name="button2"  MinWidth="25" />

        <DockPanel LastChildFill="False" DockPanel.Dock="Right" Margin="5, 0, 5, 0">
                <TextBox DockPanel.Dock="Left" Name="textBoxUsername" Text="" TextWrapping="Wrap" ToolTip="Enter username" FontSize="11" FontWeight="Normal" Height="20" HorizontalAlignment="Left" Width="90" d:LayoutOverrides="GridBox" KeyUp="textBoxUsername_KeyUp" />
                <PasswordBox Margin="5, 0, 0, 0" DockPanel.Dock="Left" Name="textBoxPassword" ToolTip="Enter password" Height="20" d:LayoutOverrides="HorizontalAlignment, GridBox" Width="90" KeyUp="textBoxPassword_KeyUp" />
                <Button DockPanel.Dock="Left" Margin="5, 0, 0, 0" Name="buttonLogin" Content="Login" Height="20" MinWidth="70" Click="buttonLogin_Click" Width="500" />
            </DockPanel>
    </DockPanel>

В настоящее время при этом будет просто исчезнуть правая панель док-станции, когда размер окна будет изменен ниже ширины всего на панели. Я бы хотел, чтобы правая панель (встроенная док-панель) уменьшилась в размерах. Возможно ли это без огромных усилий по переписыванию? Я явно оставил много кода ... Любая помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ

Я подхожу ближе, но все еще не совсем то, на что я надеялся. Я добавил сетку, это позволяет растягивать, но я надеялся оставить все неподвижно вправо. То есть я хочу только сжать, а не растянуть, но чтобы он был прикреплен вправо.

Вот как это выглядит сейчас.

 <DockPanel LastChildFill="False">
    <Button DockPanel.Dock="Left" Margin="5, 0, 0, 0" Name="button1" Content="1" FontSize="10" Foreground="#FF565656" Width="64" Height="40"/>
    <Button DockPanel.Dock="Left" Margin="5, 0, 0, 0" Name="button2"  MinWidth="25" />
         <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" MaxWidth="110" />
                    <ColumnDefinition Width="*" MaxWidth="110" />
                    <ColumnDefinition Width="100"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <TextBox Name="textBoxUsername" Text="" TextWrapping="Wrap" ToolTip="Enter username" FontSize="11" FontWeight="Normal" FontStyle="Normal" Foreground="#FF9C9C9C" FontFamily="Arial Unicode MS" Height="20" d:LayoutOverrides="GridBox" KeyUp="textBoxUsername_KeyUp" Margin="5,13,5,0" MaxWidth="110" VerticalAlignment="Center" HorizontalAlignment="Stretch" />
                <PasswordBox Grid.Column="1" Margin="5,13,5,0" Name="textBoxPassword" ToolTip="Enter password" Height="20" d:LayoutOverrides="HorizontalAlignment, GridBox" KeyUp="textBoxPassword_KeyUp" MaxWidth="110" VerticalContentAlignment="Center" />
                <Button Grid.Column="2" DockPanel.Dock="Left" Margin="5,13,5,0" Name="buttonLogin" Content="Login" Template="{StaticResource ButtonControlTemplate2}"  FontFamily="Arial" BorderBrush="{x:Null}" Background="{x:Null}" Height="20" MinWidth="70" Click="buttonLogin_Click" />
            </Grid>
 </DockPanel>

Итак, это центрирует все в имеющемся у него пространстве. Как только я устанавливаю горизонтальное выравнивание на «Право», текстовые поля становятся раздавленными вот так

введите описание изображения здесь

Есть мысли по этому поводу?


person AndySousa    schedule 04.09.2013    source источник
comment
Добавьте сетку на панель Dock-Panel и решите проблему растяжения с помощью строк и столбцов. Для этого вы можете использовать звездное значение.   -  person BendEg    schedule 05.09.2013
comment
Установите для свойства width значение AUTO и сделайте еще один снимок. Он должен соответствовать ширине родительского контейнера.   -  person jordan    schedule 05.09.2013
comment
Всякий раз, когда я устанавливаю ширину в текстовых полях на авто, она сжимается до нуля.   -  person AndySousa    schedule 05.09.2013
comment
Попробуйте установить ширину * вместо АВТО   -  person jordan    schedule 05.09.2013
comment
@ jordan.peoples имеет недопустимую ширину   -  person AndySousa    schedule 05.09.2013
comment
@BendEg, у вас есть пример кода. Я установил сетку, но она все равно не сжалась.   -  person AndySousa    schedule 05.09.2013
comment
Удалите первый LastChildFill. Это заставит первую DockPanel растянуть своего последнего дочернего элемента. Я думаю, это то, о чем вы просите. Также не используйте фиксированные значения в текстовых полях, если вы хотите, чтобы они могли растягиваться или сжиматься :)   -  person ninja hedgehog    schedule 05.09.2013


Ответы (1)


Это происходит из-за приоритета содержимого текстового поля. Собственная ширина TextBox всегда будет равна его содержимому, поэтому, если вы хотите, чтобы некоторые текстовые поля имели другое значение, вы должны либо установить их свойство Width, либо установить свойство их родителя Width.

Возможно, вас заинтересует решение:

<TextBox Name="textBoxUsername" Width="100" ... />

Или это:

...
<ColumnDefinition Width="110" />
<ColumnDefinition Width="110" />
<ColumnDefinition Width="100" />
...

Или даже это:

<TextBox Name="textBoxUsername" MinWidth="100" ... />

Обратите внимание на свойство MinWidth.

person AgentFire    schedule 05.09.2013
comment
Большое спасибо! Свойство MinWidth сделало свое дело. Выровнены по правому краю, а minWidth их устанавливает. - person AndySousa; 05.09.2013