WPF: выравнивание базовой линии метки и ее текстового поля
Скажем, у меня есть простой текстовый блок рядом с ярлыком:
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label Margin="3">MyLabel</Label>
<TextBox Margin="3" Width="100">MyText</TextBox>
</StackPanel>
...
</StackPanel>
Это дает следующий результат:
![result]()
Как вы можете видеть, базовые строки MyLabel и MyText не выровнены, что выглядит некрасиво. Конечно, я мог бы начать играть с полями до тех пор, пока они не совпадут, но поскольку это такое общее требование, я уверен, что WPF предоставляет гораздо более легкое и элегантное решение, которое я еще не нашел...
Ответы
Ответ 1
Это поведение, по-моему, вызвано тем, что по умолчанию TextBox
соответствует вертикальному выравниванию Stretch
, что заставляет его заполнять доступное пространство и иметь дополнительную пару пикселей под текстом. Если вы используете это вместо:
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label >MyLabel</Label>
<TextBox VerticalAlignment="Center" Width="100">MyText</TextBox>
</StackPanel>
</StackPanel>
... вы должны увидеть более чистый результат.
Ответ 2
Как вы думаете?
![alt text]()
<StackPanel Orientation="Horizontal">
<Label Margin="3" VerticalContentAlignment="Center">MyLabel</Label>
<TextBox Margin="3" VerticalContentAlignment="Center" Width="100">MyText</TextBox>
</StackPanel>
Ответ 3
Я достиг этого взгляда в Каксамле:
<StackPanel Orientation="Horizontal">
<Label Margin="3" VerticalAlignment="Center">MyLabel</Label>
<TextBox Margin="3" Width="100" VerticalAlignment="Center">MyText</TextBox>
</StackPanel>
Ответ 4
Я знаю, что это старый ответ, но вот пример для тех, кто ищет другой путь, где вам не нужно полагаться на фиксированную ширину текстового поля:
Вместо StackPanel используйте DockPanel и .Dock
.
Это очень удобно при использовании внутри сетки.
<DockPanel Grid.Column="2" Grid.Row="2">
<Label Content="SomeTitle:" DockPanel.Dock="Left"></Label>
<TextBox x:Name="SomeValueTextBox" VerticalAlignment="Center" DockPanel.Dock="Right"></TextBox>
</DockPanel>
![Result]()