首页 > 解决方案 > 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>

标签: c#wpfxamldockpanel

解决方案


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

例如,试试下面的代码。我删除了所有的Margins 并将按钮设置DockPanel.DockRight。请注意,您必须将 设置LastChildFillfalse,否则放置在 中的最后一个控件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>

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

窗口内容顶部栏中的按钮位于右侧。

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


推荐阅读