#wpf #xaml #stackpanel
#wpf #xaml #stackpanel
Вопрос:
Я уверен, что есть простое объяснение, почему это происходит, но, похоже, не могу его найти. Из приведенного ниже кода следует, почему мои текстовые поля выходят за пределы окна? Я бы подумал, что, поскольку я установил их ширину равной размеру окна, они будут идеально выровнены… однако запустите это, и это, очевидно, не тот случай. Чего мне не хватает? Каков был бы правильный способ установки ширины?
<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" Height="300" Width="200">
<StackPanel Orientation="Horizontal">
<TextBox Width="100">Hello</TextBox>
<TextBox Width="100" TextAlignment="Right">World</TextBox>
</StackPanel>
</Window>
Ответ №1:
Ширина окна включает в себя такие элементы, как граница, а высота включает в себя такие элементы, как строка заголовка. Поэтому вам нужно будет учитывать это при настройке ширины / высоты. Вы можете использовать параметр SizeToContent в окне, чтобы его размер соответствовал текстовым полям.
Нравится:
<Window ... SizeToContent="Width"
Или вы могли бы заменить свою StackPanel сеткой, чтобы предоставить каждому текстовому полю половину доступной ширины окна:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0">Hello</TextBox>
<TextBox Grid.Column="1" TextAlignment="Right">World</TextBox>
</Grid>
Комментарии:
1. Итак, я прав, предполагая, что если вы хотите сохранить размер содержимого, лучше всего установить минимальную ширину и высоту. И если этот элемент управления размещается, скажем, в вашем главном окне .. тогда в mainwindow должен быть просто установлен SizeToContent=»WidthAndHeight»?
2. @poco — Это действительно зависит 🙂 Вы, конечно, могли бы использовать сетку и установить минимальную ширину для определений столбцов или текстовых полей и использовать параметр SizeToContent . Но это зависит от того, какой тип макета вы собираетесь использовать.