размер панели wpf xaml

#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 . Но это зависит от того, какой тип макета вы собираетесь использовать.