WPF窗口容器是指窗口本身吗?

3
我们可以在窗口上添加控件,而不需要使用额外的容器,因此
  1. 窗口本身是一个容器吗?如果是,那么这种控件是内置面板吗?

  2. 如果窗口有内置容器,在将网格拖放到窗口时,为什么XAML标记不显示此网格位于窗口面板下方,而是直接显示在窗口上?

谢谢

"在不使用额外容器的情况下将控件添加到窗口中"。这是错误的。通常情况下,窗口只有一个控件,即面板(例如Grid)作为窗口的“内容”。子控件会被添加到该面板上。 - Clemens
@Clemens:这个Content控件是内置面板吗?如果它是一个网格,则应该提供行和列! - Phill Greggan
它在 Window 的 XAML 中,这是在 Visual Studio 中创建时生成的。默认情况下,它是一个没有任何行或列定义的网格。 - Clemens
我建议不要从VS工具箱中将控件拖到VS设计器中的窗口中。你可以自己编写XAML(因为有智能感知),或者使用Blend。 - Clemens
那么,当我通过拖放从设计器中添加网格时,它会创建另一个网格吗?这第二个网格通常是我们添加控件的地方? - Phill Greggan
你为什么不看一下Windows的XAML呢? - Clemens
1个回答

2
Window继承自ContentControl,这意味着它有一个名为Content的属性。 ContentControl是其他控件的基类,例如按钮、标签、工具提示等。它不提供任何布局,您可以自由选择适合自己需求的布局,例如GridDockPanel等。换句话说,它不是面板类型。 Panel直接继承自FrameworkElement。类层次结构如下:
Object
  DispatcherObject
    DependencyObject
      Visual
        UIElement
          FrameworkElement
            Control
              ContentControl
                Window
                UserControl
            Panel
              Grid
              StackPanel
              DockPanel

正如您所看到的,WindowGrid 共享的最近公共祖先是 FrameworkElement

如果我将一个按钮拖放到没有网格的窗口中会发生什么? - Phill Greggan
1
你将会得到一个包含一个按钮的窗口,该按钮将填满整个窗口。你可以在按钮内放置其他内容,但是你不能直接把其他东西放在窗口中。 - Lucas Trzesniewski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接