仅对齐停靠面板中的可见元素
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 上保留 HorizontalAlignement ="Right",因为如果我不设置它,它会将按钮向左对齐。 感谢您的帮助!以上是关于仅对齐停靠面板中的可见元素的主要内容,如果未能解决你的问题,请参考以下文章