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

Posted

技术标签:

【中文标题】仅对齐停靠面板中的可见元素【英文标题】:Aligning only visible elements in dockpanel 【发布时间】:2014-02-19 15:21:08 【问题描述】:
<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

阅读更多here:

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

Visibilty.Collapsed 不呈现 控制并且不保留空白。控制空间 会采取“折叠”,因此得名。

编辑后,很明显您使用的是Hidden。改用折叠:

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

编辑

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

    从 DockPanel 中移除硬编码宽度(它将自动从子控件中选择大小)。 从 DockPanel 中删除 HorizontalAlignment="Right"。 将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>

【讨论】:

您的回答有效。我已将 Visibility.Collapsed 设置为 XAML 中的默认可见性,并在后面的代码中操纵可见性。我已将所有内容都更改为折叠而不是隐藏,但效果仍然存在... 请发布相同的快照。还可以尝试发布小样本来复制问题。您的代码中必须有一些东西,因为根据框架级别,它应该可以正常工作。 不错的一个。我必须在 DockPanel 上保留 Horizo​​ntalAlignement ="Right",因为如果我不设置它,它会将按钮向左对齐。 感谢您的帮助!

以上是关于仅对齐停靠面板中的可见元素的主要内容,如果未能解决你的问题,请参考以下文章

删除sencha中的项目后如何更新面板

WPF教程四;布局之DockPanel面板

如何在页面中心的多个面板中仅对齐两个面板的分组文本?

停靠面板的 DevExpress 动态停靠

在 C# 中停靠 mdi 控件

停靠面板布局