阻止创建自定义窗口类的原因是什么,如果它们显式地指定了内容应该放在哪里

本文关键字:在哪里 窗口 自定义 创建 如果 是什么 | 更新日期: 2023-09-27 18:03:37

因此,目标是在XAML中创建一个新的自定义窗口(其中包含内容),我可以在另一个XAML设计器中使用它作为根节点(解决方法是这样做)。这曾经使它成为可能(有许多资源仍然错误地说),但是被改变了,现在会给你错误:"xyz不能是XAML文件的根,因为它是使用XAML定义的"。

Microsoft简洁地声明:

您需要在代码中定义您的基类而不使用XAML。

其他人进一步解释说,这是因为XAML设计人员不知道在自定义窗口中放置内容的位置;这是合理的,因为在它的ContentControl中已经有一些东西了。

所以,这让我思考。

如果我在xaml中创建自定义MyWindow,如下所示:

<Window x:Class="MyStuff.MyWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MyWindow">
    <Grid>
        <UserControl Name="ContentContainer"/>
        <!-- some undefined content here to justify this exercise -->
    </Grid>
</Window>

在代码中,隐藏窗口的内容并将其指向一个新的空System.Windows.ContentControl(在本例中是UserControl的ContentControl):

using System.Windows;
namespace MyStuff
{
    public partial class MyWindow : System.Windows.Window 
    {
        // hide our window content with new keyword
        public new object Content 
        {
            get { return ContentContainer.Content; }
            set { ContentContainer.Content = value; }
        }
        public Window()
        {
            InitializeComponent();
        }
    }
}

…为什么我还是不能这么做?在这种情况下,为什么默认编译器行为不要求显式覆盖Content以指向另一个合适的位置?

在没有明确定义内容的实现中,为什么不使用默认功能来替换父控件中的ContentControl作为警告内容(并且只在父窗口的ContentControl不可访问时抛出错误)?

阻止创建自定义窗口类的原因是什么,如果它们显式地指定了内容应该放在哪里

我想你搞混了内容到底是什么

窗口的Content是窗口元素内的所有内容,这个包括您的UserControl

有几个选项供你选择。

  1. 附加内容创建一个依赖属性,并将ContentControlContentPresenter绑定到该属性。看到这里。
  2. 为您的Window创建一个Style,在那里您可以使用ControlTemplate定义围绕Window Content。看到这里。
  3. 1和2的组合,这将是一个自定义控件,在这里你将从Window继承,并定义它的样式和控制模板。看到这里。