DockPanel 不可见,即使它设置为可见

DockPanel is not visible even though it is set to visible

我在另一个 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="0, 0, 0, 1000" 的边距,它可能在任何地方。

我认为这是问题所在。

[编辑] 而且我看到更多这些“3 位数边距”。避免这种情况,这不是 WPF 的使用方式。使用边距作为“元素周围 space 的一点点”

问题是您尝试使用 Margin 定位所有控件 ,这违背了 DockPanel 的目的。您可以 select XAML 中的每个按钮并查看 Visual Studio 中的设计器。它们都位置偏远。不要每次都在 WPF 中使用这种脆弱的定位。有很多面板已经可以更轻松地处理这种情况,并且可以响应调整大小。

例如,试试下面的代码。我删除了所有的 Margins,只是将按钮的 DockPanel.Dock 设置为 Right。请注意,您必须将 LastChildFill 设置为 false,否则放在 DockPanel 中的最后一个控件将占据剩余的 space 并居中,无论在其上设置 DockPanel.Dock 值。

If you set the LastChildFill property to true, which is the default setting, the last child element of a DockPanel always fills the remaining space, regardless of any other dock value that you set on the last child element. To dock a child element in another direction, you must set the LastChildFill property to false and must also specify an explicit dock direction on the last child element.

对于外部 DockPanel,我刚刚添加了一个新的最后一个 Grid,它占据了剩余的 space。如果它不存在,您还必须设置 LastChildFill,否则该条将在 window.

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

现在按钮会自动位于右侧,彼此相邻。

当然,您也可以创建与其他面板相同的布局,但由于不清楚您的最终布局应该是什么样子,我只能使用您的结构提供此示例。