Выравнивание только видимых элементов в док-панели
<DockPanel Grid.Row="1" HorizontalAlignment="Right" Width="300">
<Button x:Name="startPackageSendButton" Command="{Binding StartPackageSendingProcessCommand}" Style="{StaticResource blueButtonStyle}" Content="Start" Width="100" VerticalAlignment="Top" Margin="0,0,0,0" Visibility="Visible" HorizontalAlignment="Right"/>
<Button x:Name="clearPackageSendButton" Command="{Binding ClearPackageSendingProcessCommand}" Style="{StaticResource blueButtonStyle}" Content="Clear" Width="100" VerticalAlignment="Top" Margin="0,0,0,0" Visibility="Collapsed" HorizontalAlignment="Right"/>
<Button x:Name="cancelPackageSendButton" Command="{Binding CancelPackageSendingProcessCommand}" Style="{StaticResource blueButtonStyle}" Content="Stop" Width="100" VerticalAlignment="Top" Margin="0,0,0,0" Visibility="Visible" HorizontalAlignment="Right"/>
</DockPanel>
я использую Dockpanel
сложить несколько кнопок с горизонтальным выравниванием. Если некоторые кнопки не Visible
У меня есть пустые места между кнопками.
Как я могу устранить пустые места, если кнопки не имеют Visibility
установить видимым? Есть ли способ, которым я мог бы добиться этого эффекта?
РЕДАКТИРОВАТЬ: я изменил скрытый на рухнул, как советовали.
1 ответ
Я подозреваю, что вы скрываете элементы управления, устанавливая Visibility.Hidden
,
Вы должны использовать Visibility.Collapsed
,
Узнайте больше здесь:
Разница в том, что Visibility.Hidden скрывает элемент управления, но резервирует место, которое он занимает в макете. Таким образом, он отображает пробелы вместо элемента управления.
Visibilty.Collapsed не отображает элемент управления и не резервирует пробелы. Пространство, которое займет элемент управления, "свернуто", отсюда и название.
После вашего редактирования становится очевидным, что вы используете Hidden
, Вместо этого используйте Collapsed:
<DockPanel Grid.Row="1" HorizontalAlignment="Right" Width="300">
<Button Visibility="Collapsed"/>
<Button Visibility="Visible"/>
<Button Visibility="Collapsed"/>
</DockPanel>
РЕДАКТИРОВАТЬ:
Я проверил ваш пример кода после удаления части Style и Command и обнаружил несколько проблем:
- Удалите жестко заданную ширину из DockPanel (он автоматически выберет размер из дочерних элементов управления).
- Удалить
HorizontalAlignment="Right"
из DockPanel. - Задавать
LastChildFill
вFalse
если вы не хотите, чтобы последний добавленный ребенок занимал все пространство.
Вот как это должно выглядеть и работает отлично:
<DockPanel Grid.Row="1" LastChildFill="False">
<Button x:Name="startPackageSendButton" Content="Start" Width="100"
VerticalAlignment="Top" Margin="0,0,0,0" Visibility="Collapsed"
HorizontalAlignment="Right"/>
<Button x:Name="clearPackageSendButton" Content="Clear" Width="100"
VerticalAlignment="Top" Margin="0,0,0,0" Visibility="Visible"
HorizontalAlignment="Right"/>
<Button x:Name="cancelPackageSendButton" Content="Stop" Width="100"
VerticalAlignment="Top" Margin="0,0,0,0" Visibility="Collapsed"
HorizontalAlignment="Right"/>
</DockPanel>