Как иметь заливку управления все свободное место

У меня есть код xaml:

<Grid>
    <WrapPanel>
    <TextBox ></TextBox>
    <Button Content="GetIt" />
    </WrapPanel>
</Grid>

Как я могу для получения всего свободного места для текстового поля?

я хочу сделать что-то как этот:

| [____________________][GetIt] |

7
задан itowlson 13 March 2010 в 18:35
поделиться

4 ответа

Этого можно добиться несколькими способами, в том числе следующим:

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="Auto" />
  </Grid.ColumnDefinitions>
  <TextBox />
  <Button Grid.Column="1">GetIt</Button>
</Grid>
7
ответ дан 6 December 2019 в 15:20
поделиться

Попробуйте следующее:

<Grid>
    <TextBox HorizontalAlignment="Stretch" Margin="2,2,102,2"></TextBox>
    <Button HorizontalAlignment="Right" Width="100" Content="GetIt" />
</Grid>

Просто установите кнопку нужной ширины, и текстовое поле заполнит все остальное.


Спасибо за улов; исправлено выше, чтобы правильно обрабатывать поля справа. Однако это требует обновления поля при изменении ширины кнопки. Две колонки - лучшее решение, если вы планируете часто менять интервал. Использование поля будет более чистым, если у вас есть несколько элементов управления в сетке и вы не хотите создавать вложенные сетки для обработки такого рода разделения.

3
ответ дан 6 December 2019 в 15:20
поделиться

Самый простой способ - использовать DockPanel вместо Grid (по умолчанию LastChildFill равен true, но я добавил его сюда для ясности):

<DockPanel LastChildFill="True">
  <Button Content="GetIt" DockPanel.Dock="Right" />
  <TextBox ></TextBox>
</DockPanel>
2
ответ дан 6 December 2019 в 15:20
поделиться

Вот способ добиться того расположения, которое вы ищете:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
    <Style TargetType="TextBox">
      <Setter Property="Margin" Value="2"/>
    </Style>
  </Page.Resources>
  <DockPanel>
    <DockPanel DockPanel.Dock="Top">
      <!-- Because the Button is fixed in size, you can divide the row it's 
      in using a DockPanel:  the Button is docked to the right edge, and the
      TextBox fills up the remaining available space. -->
      <Button Margin="2" Padding="2" DockPanel.Dock="Right">GetIt</Button>
      <TextBox />
    </DockPanel>
    <!-- Because the TextBoxes *aren't* fixed in size, you can't use docking,
    as it won't size them.  So put them in a Grid and use star sizing to
    divide the grid's vertical space into two equal parts.   The Grid will
    fill up the remainder of the (outer) DockPanel. -->
    <Grid>
      <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
      </Grid.RowDefinitions>
      <TextBox Grid.Row="0">Another TextBox</TextBox>
      <TextBox Grid.Row="1">Yet another TextBox</TextBox>
    </Grid>
  </DockPanel>
</Page>
2
ответ дан 6 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: