c# - DockPanel 不可见,即使它设置为可见
问题描述
我有一个DockPanel
里面另一个DockPanel
第一个设置为停靠在整个表单上,但第二个设置在表单的顶部,里面有三个按钮,它的背景颜色设置为灰色,我可以在编辑器中看到内容蓝色边框,但它没有颜色或文本,当我运行应用程序时没有任何按钮没有颜色没有。
这是 XAML 代码:
<Grid Background="White">
<DockPanel Name="MainBackground">
<DockPanel Name="Top" Height="32" Background="#FF707070" DockPanel.Dock="Top" Margin="0, 0, 0, 1000">
<Button
Width="46"
Height="32"
DockPanel.Dock="Right"
Margin="687,0,0,398"
Background="White" Click="Button_Click_1">
<StackPanel Orientation="Horizontal">
<Image Source="Res/RDI.png" Width="20" Height="20"/>
</StackPanel>
</Button>
<Button
Width="46"
Height="32"
Content="×"
FontSize="20" DockPanel.Dock="Right" Click="Button_Click" Margin="734,0,0,398" Background="White"/>
</DockPanel>
</DockPanel>
</Grid>
解决方案
问题是您尝试使用定位所有控件Margin
,这违背了 a 的目的DockPanel
。您可以选择 XAML 中的每个按钮并查看 Visual Studio 中的设计器。它们都位于远处。并不是每个人都在 WPF 中使用这种脆弱的定位。有很多面板已经可以更轻松地处理这种方式并且对调整大小做出响应。
例如,试试下面的代码。我删除了所有的Margin
s 并将按钮设置DockPanel.Dock
为Right
。请注意,您必须将 设置LastChildFill
为false
,否则放置在 中的最后一个控件DockPanel
将占用剩余空间并居中,无论DockPanel.Dock
在其上设置值。
如果将该
LastChildFill
属性设置为true
(这是默认设置),则 a 的最后一个子元素DockPanel
始终填充剩余空间,而不管您在最后一个子元素上设置的任何其他停靠值。要将子元素停靠在另一个方向,您必须将LastChildFill
属性设置为false
并且还必须在最后一个子元素上指定显式停靠方向。
对于外部DockPanel
,我只是添加了一个新的 lastGrid
来占用剩余空间。如果它不存在,您还必须设置LastChildFill
,否则该栏将在窗口中居中。
<Grid Background="White">
<DockPanel Name="MainBackground">
<DockPanel Name="Top" Height="32" Background="#FF707070" DockPanel.Dock="Top" LastChildFill="False">
<Button
Width="46"
Height="32"
DockPanel.Dock="Right"
Background="White" Click="Button_Click_1">
<StackPanel Orientation="Horizontal">
<Image Source="Res/RDI.png" Width="20" Height="20"/>
</StackPanel>
</Button>
<Button
Width="46"
Height="32"
Content="×"
FontSize="20" DockPanel.Dock="Right" Click="Button_Click" Background="White"/>
</DockPanel>
<StackPanel>
<TextBlock Text="This is where your content would be placed."/>
<TextBlock Text="Alternatively, set the last child fill of the dock panel to false."/>
</StackPanel>
</DockPanel>
</Grid>
现在按钮自动定位在右侧,彼此相邻。
当然,您也可以使用其他面板创建相同的布局,但是由于不清楚您的最终布局应该是什么样子,所以我只能使用您的结构提供这个示例。
推荐阅读
- java - 为什么快捷方式 sout 在 IntelliJ IDE 中对我不起作用
- css - 如何增加引导卡的宽度和间距
- python-3.x - 无法使 python 在 conda 环境中工作(未找到 GLIBC)
- android - 如何手动更改firebase实时数据库、数据类型?
- c++ - 如何将 myOwn-background 图像添加到 QPlainTextEdit?
- google-cloud-platform - Google Cloud Speech to Text API 停止工作
- javascript - 该功能未链接到照片
- excel - 缩放工作表后 Excel 在 VBA 中返回错误的图表高度
- excel - 从 Excel 写入 Word
- python - Tkinter:使用另一个类的框架