Расположите два элемента управления на линии в растягиваемом окне WPF - PullRequest
1 голос
/ 05 сентября 2011

Вот довольно распространенный шаблон пользовательского интерфейса: текстовое поле, содержащее путь слева и кнопку «Обзор» справа от него.Если размер окна изменяется, кнопка остается вправо, но текстовое поле растягивается, чтобы показать больше или меньше пути.Таким образом, в старые добрые времена якорей кнопка была бы привязана вправо, а текстовое поле было бы привязано как слева, так и справа.

Попытка воспроизвести это в WPF кажется чрезвычайно сложной.

Если я создаю новое окно, оно поставляется с макетом сетки по умолчанию.Я помещаю свое текстовое поле слева и изменяю его размер соответственно, затем размещаю кнопку справа.Горизонтальное выравнивание для текстового поля - «Растянуть», а для кнопки - «Право».

На мой взгляд, это работает, как описано, но в реальной жизни текстовое поле вообще не изменяется, а вместо этого пытается центрировать себяв окне, пока кнопка действует как положено.Что дает?

Вот мой XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="241" d:DesignWidth="414" SizeToContent="WidthAndHeight">
    <Grid>
        <TextBox Height="23" HorizontalAlignment="Stretch" Name="textBox1" VerticalAlignment="Top" Margin="12,11,101,0" />
        <Button Content="Button" Height="23" HorizontalAlignment="Right" Margin="0,11,12,0" Name="button1" VerticalAlignment="Top" Width="75" />
    </Grid>
</Window>

Ответы [ 2 ]

4 голосов
/ 05 сентября 2011

Вы бы создали еще один GridControl с двумя столбцами, один с фиксированной шириной для кнопки Browse, а другой для TextBox.

<Grid>            
    <Grid.ColumnDefinitions> 
        <ColumnDefinition />
        <ColumnDefinition Width="75" />
    </Grid.ColumnDefinitions>
    <TextBox Grid.Column="0" />
    <Button Grid.Column="1" />
</Grid>
3 голосов
/ 05 сентября 2011

Можно использовать DockPanel и установить для свойства LastChildFill значение true, чтобы текстовое поле использовало все доступное пространство:

<DockPanel LastChildFill="true">
  <Button DockPanel.Dock="Right">Browse</Button>
  <TextBox>Content</TextBox>
</DockPanel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...