2014-01-28 5 views
0
<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 установлены на видимые? Есть ли способ, которым я мог бы достичь этого эффекта?

EDIT: Я сменил скрытый на рухнувший, как советовал.

ответ

4

Я подозреваю, что вы скрываете элементы управления, установив Visibility.Hidden.

Вы должны использовать Visibility.Collapsed.

Подробнее here:

Разница заключается в том, что Visibility.Hidden скрывает элемент управления, но оставляет за собой место, которое он занимает в макете. Таким образом, вместо элемента управления он отображает пробелы .

Visibilty.Collapsed не оказывает управление и не сохраняет пробелы. Пробел, который примет управление , «рухнул», отсюда и название.

После редактирования, очевидно, что вы используете Hidden. Используйте Collapsed вместо:

<DockPanel Grid.Row="1" HorizontalAlignment="Right" Width="300"> 
    <Button Visibility="Collapsed"/> 
    <Button Visibility="Visible"/> 
    <Button Visibility="Collapsed"/> 
</DockPanel> 

EDIT:

Я проверил вам пример кода после удаления стиля и командной части и нашел несколько вопросов:

  1. удаления жёстко прописанную ширины от DockPanel (Он будет автоматически выберите размер из дочерних элементов управления).
  2. Удалить HorizontalAlignment="Right" от DockPanel.
  3. Установить 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> 
+0

ваш ответ действителен. Я установил Visibility.Collapsed как видимость по умолчанию в XAML, и я манипулирую видимостью в коде. Я изменил все, чтобы свернуть, а не скрыто, но эффект все еще существует ... – no9

+0

Пожалуйста, разместите снимок для него. Также попробуйте опубликовать небольшую пробную копию, реплицирующую проблему. В вашем коде должно быть что-то, потому что в соответствии с уровнем структуры он должен работать нормально. –

+0

@ no9 - См. Обновление в ответ, и если это поможет. –

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