gpt4 book ai didi

c# - 如果自定义 Window 类明确指定内容应该放在哪里,阻止创建自定义 Window 类的背后原因是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:55 24 4
gpt4 key购买 nike

因此,目标是在 XAML 中创建一个新的自定义窗口(其中包含内容),我可以在另一个 XAML 设计器中将其用作根节点(解决方法是执行 this ).这曾经使它成为可能(并且有一个 number of resources 仍然在那里错误地说了这么多),但是已经改变并且现在会给你错误:“xyz 不能是 XAML 文件的根,因为它是使用 XAML 定义的".

Microsoft 简洁的 states :

You need to define your base class all in code without using 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();
}
}
}

...为什么我仍然被禁止这样做?在这种情况下,为什么默认编译器行为不要求显式覆盖内容以指向另一个合适的位置?

并且在没有明确定义内容应该放在哪里的实现中,为什么不使用默认功能来替换父控件中 ContentControl 中的任何内容作为带有警告的内容(并且只在父窗口的ContentControl 无法访问)?

最佳答案

我认为您混淆了实际的内容。

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

有几个选项供您选择。

  1. 其他内容 创建依赖属性,并将ContentControlContentPresenter 绑定(bind)到该属性。参见 here .
  2. 为您的 Window 创建一个 Style,您可以在其中定义 goes around Content Window 使用 ControlTemplate。参见 here .
  3. 1 和 2 的组合,这将是一个自定义控件,在这里您将继承自 Window,并定义它的样式和控件模板。参见 here .

关于c# - 如果自定义 Window 类明确指定内容应该放在哪里,阻止创建自定义 Window 类的背后原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31513693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com