仅对齐dockpanel中的可见元素

时间:2014-01-28 10:57:01

标签: c# .net wpf alignment dockpanel

<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 个答案:

答案 0 :(得分: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>

修改

我删除了样式和命令部分后检查了示例代码,发现了一些问题:

  1. 从DockPanel中删除硬编码宽度(它会自动从子控件中选择大小)。
  2. 从DockPanel中删除HorizontalAlignment="Right"
  3. LastChildFill设置为False,以防您不希望上次添加的孩子占用所有空间。
  4. 它应该是这样的,它完美地运作:

    <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>