2016-04-20 3 views
0

У меня есть DockPanel, содержащий ярлык с фиксированной шириной и TextBox с Min и MaxWidth. Я хочу, чтобы выровнять TextBox влево и он не растягиваться до его MaxWidth и не его сжиматься, пока его MinWidth (если окно изменяет размер, например), как это:Выровнять по левому краю и заполнить пространство в DockPanel

enter image description here

Panel:

<DockPanel LastChildFill="True"> 
    <Label Content="Fixed Width" DockPanel.Dock="Left" /> 
    <TextBox MinWidth="80" MaxWidth="250" DockPanel.Dock="Left" HorizontalAlignment="Left" /> 
</DockPanel> 

Однако это только выравнивает TextBox слева. Если я оставил HorizontalAlignment, он центрируется. Как я могу добиться чего-то вроде скриншота?

Обратите внимание, что я не хочу использовать Grid, так как мне нужно обернуть TextBox в какой-то момент под меткой (я сделаю это с триггером, изменяющим свойство Dock в настоящее время).

ответ

1

Посмотрите на это решение: https://stackoverflow.com/a/13040678/4625433

Вам нужно будет переместить MinWidth="80" из TextBox в LeftStretchPanel.

<ScrollViewer HorizontalScrollBarVisibility="Auto"> 
    <DockPanel LastChildFill="True" Background="Yellow"> 
     <Label Content="Fixed Width" Background="Red" /> 
     <local:LeftStretchPanel MinWidth="80"> 
      <TextBox MaxWidth="250" Background="Blue" /> 
     </local:LeftStretchPanel> 
    </DockPanel> 
</ScrollViewer> 
+0

Это работает, но только с помощью ScrollViewer. Если я оставлю это, Docking the Textbox ниже больше не работает, потому что Panel, по-видимому, вычисляет высоту 0 для TextBox – Lennart

+0

Даже без '', если я только изменил положение стыковки TextBox, ничего не происходит. Вы изменили обе стыковки? Если вам по-прежнему нужна помощь, можете ли вы поделиться кратким примером, с которым я могу работать? –

Смежные вопросы