阻止创建自定义窗口类的原因是什么,如果它们显式地指定了内容应该放在哪里
本文关键字:在哪里 窗口 自定义 创建 如果 是什么 | 更新日期: 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
。
有几个选项供你选择。
- 为附加内容创建一个依赖属性,并将
ContentControl
或ContentPresenter
绑定到该属性。看到这里。 - 为您的
Window
创建一个Style
,在那里您可以使用ControlTemplate
定义围绕Window
的Content
的。看到这里。 - 1和2的组合,这将是一个自定义控件,在这里你将从
Window
继承,并定义它的样式和控制模板。看到这里。