DockPanel LastChildFill изменить размер на MinWidth?
Я пытаюсь добиться простой менубар в WPF.
Вот XAML:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DockPanel>
<DockPanel Background="Black" VerticalAlignment="Top" LastChildFill="True" DockPanel.Dock="Top" Height="28">
<ToggleButton Content="--" Visibility="Collapsed" />
<StackPanel Orientation="Horizontal">
<Button Content="Add" />
<Button Content="Expand" />
</StackPanel>
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
<TextBox Text="Search" MinWidth="80" Width="200" />
<Button Content="X" Margin="0,1,50,0" />
</StackPanel>
</DockPanel>
</DockPanel>
</Page>
Это выглядит хорошо, но когда я изменяю размер страницы до меньшей ширины, последний дочерний элемент (панель стека с текстовым полем поиска) прячется за левыми элементами. Вот так: http://s9.postimage.org/m0tkrobwd/printscreen.png
Было бы хорошо, если бы текстовое поле изменило размер, если бы у него было достаточно места для достижения минимальной ширины... Возможно ли это?
4 ответа
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition MaxWidth="200" MinWidth="80"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ToggleButton Content="--" Visibility="Collapsed" />
<Button Content="Add" Grid.Column="1"/>
<Button Content="Expand" Grid.Column="2"/>
<TextBox Text="Search" Grid.Column="4"/>
<Button Content="X" Margin="0,1,50,0" Grid.Column="5" />
</Grid>
Вместо того, чтобы давать MaxWidth и MinWidth для TextBox, передайте его Grid Column. Я надеюсь, что это поможет.
Самое сложное - дать элементу управления (в вашем случае SearchTextBox) выравнивание, но при этом перехватить доступное пространство до MaxWidth
, Благодаря этому ответу.
<DockPanel>
<DockPanel Background="Black" DockPanel.Dock="Top" Height="28">
<ToggleButton DockPanel.Dock="Left" Content="--" Visibility="Collapsed" />
<StackPanel DockPanel.Dock="Left" Orientation="Horizontal">
<Button Content="Add" />
<Button Content="Expand" />
</StackPanel>
<Button DockPanel.Dock="Right" Content="X" />
<Border Name="Container">
<TextBox Text="Search" HorizontalAlignment="Right"
Width="{Binding ElementName=Container, Path=ActualWidth}" MaxWidth="200" />
</Border>
</DockPanel>
</DockPanel>
Контейнер тоже может быть другим Контролем.
Его просто из-за размера страницы недостаточно для отображения обеих стековых панелей на странице. для этого вы можете использовать минимальный размер страницы. это предотвратит повреждения контрольного сокрытия.
и это также зависит от вас, какой дизайн вы хотите. Вы можете использовать сетку, а не стеки.
Привет Установите MaxWidth и MinWidth для TextBox, а не Width. Если вы установите ширину, то она имеет наивысший приоритет и, следовательно, MinWidth не вступит в действие. Надеюсь, это поможет.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ToggleButton Content="--" Visibility="Collapsed" />
<Button Content="Add" Grid.Column="1"/>
<Button Content="Expand" Grid.Column="2"/>
<TextBox Text="Search" MinWidth="80" MaxWidth="600" Grid.Column="3" ClipToBounds="True" />
<Button Content="X" Margin="0,1,50,0" Grid.Column="4"/>
</Grid>