Любое свойство, чтобы установить размер текстового поля в соответствии с размером окна?
Как изменить размер текстового поля при изменении размера окна
Ответ 1
Макет в WPF сильно зависит от родительского контейнера. Например, если вы создаете форму с метками и полями ввода, подумайте об использовании панели "Сетка". Элементы управления в WPF по умолчанию изменяют размер в соответствии с поведением макета родителя. Ниже приведен пример окна с двумя помеченными текстовыми полями и двумя кнопками, размер которых изменяется вместе с окном.
<Window>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Content="Contact Name" Grid.Row="0" Grid.Column="0" />
<TextBox Grid.Row="0" Grid.Column="1" />
<Label Content="Contact Location" Grid.Row="1" Grid.Column="0" />
<TextBox Grid.Row="1" Grid.Column="1" />
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
VerticalAlignment="Bottom" Grid.Row="2" Grid.Column="1">
<Button Content="OK" Width="75" Height="24" Margin="3" />
<Button Content="Cancel" Width="75" Height="24" Margin="3" />
</StackPanel>
</Grid>
</Window>
Или, если вам нужно что-то похожее на расположение адресной строки браузера, вы можете сделать что-то вроде:
<Window>
<DockPanel>
<DockPanel DockPanel.Dock="Top">
<Button Content="Back" DockPanel.Dock="Left" />
<Button Content="Forward" DockPanel.Dock="Left" />
<Button Content="Refresh" DockPanel.Dock="Right" />
<TextBox /> <!-- fill is assumed for last child -->
<DockPanel>
<StatusBar DockPanel.Dock="Bottom" />
<WebBrowser /> <!-- fill is assumed for last child -->
</DockPanel>
</Window>
Обратите внимание, что в приведенном выше примере я вложил два DockPanel. Это также могло быть достигнуто с помощью Grid, но разметка была бы намного более загромождена. Если вы новичок в WPF, я бы настоятельно предложил поиграть с различными доступными вам панелями. Когда вы узнаете, когда применять конкретную панель к определенному макету, это значительно упрощает работу с WPF.
Ответ 2
Бит поздно, но я хочу, чтобы это знали все.
Чтобы сделать текстовое поле заполнением всего окна и изменить его размер, вам нужно явно установить его значение "Высота" на "Авто", даже если оно по умолчанию!
Ответ 3
Это может быть немного сложно из-за небольшого количества ограничений.
- Текстовое поле, которое вы не можете наложить на ширину авто (в моем случае, если какая-то одна копия вставляет длинную строку, она выходит из границы из-за автоматической ширины).
- Я не могу сохранить его по умолчанию, потому что в случае отсутствия текста он очень мал по ширине, поэтому мне нужен MinWidth.
- В то же время вы должны иметь представление статической ширины, потому что мы хотим обернуть текст для конкретной строки.
Я пробовал это решение, которое ограничивало вашу ширину до родителя (я согласен, что могут быть и лучшие решения, но это было легко и отлично работало)
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" Name="LeftColumnDefinition" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox Grid.Column="0" BorderThickness="3" VerticalScrollBarVisibility="Auto" HorizontalAlignment="Stretch" ClipToBounds="True"
TextWrapping="Wrap" Width= "{Binding ElementName=LeftColumnDefinition, Path=Width}" MinWidth="560" MinHeight="57" AcceptsTab="True" Foreground="{StaticResource darkBlueBrush}">FIX message... </TextBox>
<Button Margin="2,0,0,0" Grid.Column="1" Content="Publish FIX Message" Name="PublishFIX" Click="publishFix_Click" HorizontalAlignment ="Center" Height="25"/>
</Grid>
Так что только хорошая вещь, я сделал, я приколол
Width = "{Binding ElementName = LeftColumnDefinition, Path = Width}"
to <ColumnDefinition Width="*" Name="LeftColumnDefinition" />
Ответ 4
Одним из способов было бы привязать высоту и ширину TextBox к высоте и ширине окна, например:
<TextBox Height={Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}, Path=Height} />
Может существовать другое свойство, к которому может потребоваться привязка, или вы можете использовать выражение, поэтому TextBox не является точно Height/Width родительского окна. Многое зависит от вашего конкретного сценария использования, но этого должно быть достаточно, чтобы вы начали.