Текстовое поле WPF не будет заполнять StackPanel
у меня есть TextBox управление в StackPanel чей Orientation установлено значение Horizontal, но не удается получить текстовое поле, чтобы заполнить оставшееся пространство StackPanel.
XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="180" Width="324">
<StackPanel Background="Orange" Orientation="Horizontal" >
<TextBlock Text="a label" Margin="5" VerticalAlignment="Center"/>
<TextBox Height="25" HorizontalAlignment="Stretch" Width="Auto"/>
</StackPanel>
</Window>
и вот как это выглядит:

почему это текстовое поле не заполняет StackPanel?
Я знаю, что могу иметь больше контроля с помощью Grid контроль, я просто запутался в макете.
2 ответов:
у меня была такая же проблема с
StackPanel, и поведение "по дизайну".StackPanelпредназначен для "укладки" вещи, даже за пределами видимой области, поэтому он не позволит вам заполнить оставшееся пространство в укладке размер.можно использовать
DockPanelСLastChildFillзначениеtrueи закрепите все элементы управления без заполнения наLeftдля имитации эффекта, который вы хотите.<DockPanel Background="Orange" LastChildFill="True"> <TextBlock Text="a label" Margin="5" DockPanel.Dock="Left" VerticalAlignment="Center"/> <TextBox Height="25" Width="Auto"/> </DockPanel >
Я бы рекомендовал использовать сетку вместо этого:
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="180" Width="324"> <Grid Background="Orange"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" Text="a label" VerticalAlignment="Center"/> <TextBox Grid.Column="1"/> </Grid> </Window>другой способ обойти эту проблему-сложить метку сверху, а не справа. Я заметил, что UWP имеет встроенное свойство заголовка, которое вы можете использовать для этого, не уверен, существует ли свойство заголовка для WPF.
<TextBox Header="MyLabel" />
Comments