仅对齐停靠面板中的可见元素

no9*_*no9 0 .net c# 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>
Run Code Online (Sandbox Code Playgroud)

我正在使用Dockpanel水平对齐堆叠一些按钮。如果某些按钮不是,Visible我在按钮之间有空格。

如果按钮未Visibility设置为可见,我如何消除空格?有什么技术可以达到这种效果吗?

编辑:我按照建议将隐藏更改为折叠。

Roh*_*ats 5

我怀疑您通过设置隐藏控件Visibility.Hidden

你应该使用Visibility.Collapsed.

在这里阅读更多:

不同之处在于Visibility.Hidden隐藏了控件,但保留了它在布局中所占的空间。所以它呈现空白而不是控件。

Visibilty.Collapsed不呈现控件并且不保留空白。控件占用的空间是“折叠的”,因此得名。

编辑后,很明显您正在使用Hidden. 改用折叠:

<DockPanel Grid.Row="1" HorizontalAlignment="Right" Width="300">
    <Button Visibility="Collapsed"/>
    <Button Visibility="Visible"/>
    <Button Visibility="Collapsed"/>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

编辑

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

  1. 从 DockPanel 中删除硬编码宽度(它将自动从子控件中选择大小)。
  2. HorizontalAlignment="Right"从 DockPanel 中删除。
  3. 设置LastChildFillFalse以防您不希望最后添加的孩子占用所有空间。

这是它应该是什么样子,它完美地工作:

<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>
Run Code Online (Sandbox Code Playgroud)