为什么将二级子类化 Button 控件添加到 Grid 会产生 E_INVALIDARG?

2023-12-11

我在处理 C++/CX 中的 Windows.UI.Xaml.Button 类的子类时遇到了这个问题,我想知道发生了什么。

如果我将一个控件实例添加到网格中,一切都会按预期工作。

如果我对控件进行子类化并添加一个实例subclass,一切都按预期进行。

但如果我子类化我的子类化控件并将其实例添加到网格中,我在 Grid::Children::Append() 期间抛出 E_INVALIDARG。是什么赋予了?

我的代码大致如下所示(LayoutRoot 是 MainPage.xaml 中的一个网格,该示例已在空的简单 Metro 应用程序中进行了测试):

// Scenario 1: This works (duh!)
LayoutRoot->Children->Append(ref new Button());

// Scenario 2: This works
LayoutRoot->Children->Append(ref new MyButton1());

// Scenario 3: This doesn't work, it will cause an E_INVALIDARG to be thrown by the collection
LayoutRoot->Children->Append(ref new MyButton2());

// This is how MyButton1 and MyButton2 is defined
public ref class MyButton1 : public Button { 
  public:
    MyButton1() {};
    ~MyButton1() {};
};

public ref class MyButton2 : public MyButton1 { 
  public:
    MyButton2() {};
    ~MyButton2() {};
};

请注意,这个问题与这个问题,但错误和场景完全不同,我可以单独发布此错误。

UPDATE:我认为阅读后我理解这个问题的方向是正确的伊恩·格里菲斯的这篇文章,但我需要更多地了解这个特定示例的行为。可以找到重复此问题的完整代码在这里,请参阅线程中的第 3 篇文章.

UPDATE:据我目前所知,并非所有 WinRT 类型都支持继承。我对此没有可靠的源参考,但我读到 Windows.UI.Xaml 类应该支持继承,但其他 WinRT 类型不会。 Windows.UI.Xaml.Controls.Button 类显然可以,而我自己的 MyButton1 则不能。我想知道我必须做什么才能使 MyButton1 像 Button 类一样“可继承”。

我发现用 Windows.UI.Xaml.Controls.ProgressBar 替换 Windows.UI.Xaml.Controls.Button 类将使方案 2 失败,这告诉我 ProgressBar 类(尚)不可能进行子类化。这一观察使我相信一个类需要做一些明确的事情才能使其可继承。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么将二级子类化 Button 控件添加到 Grid 会产生 E_INVALIDARG? 的相关文章

随机推荐

  • 对于包含空格的文件路径,FFMPEG 命令失败

    我正在执行以下操作ffmpeg用于修剪视频的命令 我遇到的问题是 如果文件路径包含空格 则命令失败 我尝试了多种方法来处理空格 但除了将文件移动到没有空间的路径然后执行命令之外 没有一种方法有效以新文件路径作为源 下面是命令 execFFm
  • 正则表达式删除所有后面不跟数字的句点

    I have str replace 0 9 g 但它会删除除句点和句点后面的数字之外的所有内容 例如 3 14 变为 1 我想要的是 3 14 gt 3 14 hello world gt helloworld hi gt hi hi 2
  • MongoDB ObjectID 为何是 12 字节?

    据我所知 MongoDB中的字符串以UTF 8存储 因此每个字符在1到4个字节之间 MongoDB 文档对 ObjectID 有如下描述 返回新的 ObjectId 值 12 字节的 ObjectId 值包括 一个 4 字节值 表示自 Un
  • 处理播放中动态创建的文件 2

    我编写了一个小应用程序 可以使用 play 2 0 创建可下载的 pdf 文件 我想为公众服务 在我的开发环境中 我创建了一个文件夹 assets 文件夹 一切都很好 现在 当切换到生产环境时 我发现 play 总是在我背后部署这些文件 我
  • MySQL 上 Django 中的列数据太长

    对于模型中声明为的列 我收到此错误TextField数据库中是一个 LONGTEXT 而我尝试插入的值只有 3KB 长 AFAIK LONGTEXT 理论限制是 2GB 所以我不知道为什么有这个限制或如何绕过它 有任何想法吗 我得到的具体异
  • ngx-capture :无法捕获屏幕捕获区域内的

    我无法捕捉 img 在屏幕捕获区域内 我想要一个定义的部分 其中包含要捕获的图像和内容 我们怎样才能做到这一点 帮助 Visit https stackblitz com edit ngx capture div angular wnkjw
  • 如何存储自定义对象数组(目标)

    如何存储在 NSUserDefaults 中创建的 Goal 类型的对象数组 快速 这是代码 func saveGoalList newGoalList Goal let updatedGoalList newGoalList NSUser
  • 在 Xcode 中打开非 Xcode 项目

    现在我正在开发一个使用 Markdown 的静态网站 我不想在 SublimeText 中编辑文件 而是想在 Xcode 中编辑它们 我可以在 Xcode 中打开各个文件 但我想打开整个静态站点目录并受益于使用文件导航器窗格和其他 Xcod
  • PHP:通过 ID 将 html 内容附加(添加)到现有元素

    我需要使用 PHP 按 ID 搜索元素 然后向其附加 html 内容 这看起来很简单 但我是 php 新手 找不到合适的函数来执行此操作 html file get contents http example com doc new DOM
  • Matlab中不同大小的矩阵数组

    是否可以在 Matlab 中创建具有不同大小的矩阵数组 例如 Array Mat 1 zeros 3 Array Mat 2 zeros 4 这会产生错误 那么我怎样才能制作矩阵数组呢 您可以使用细胞 gt gt a 1 1 2 3 4 a
  • Firebase数据库持久存储[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 只是想知道是否Firebase 持久性存储当它缓存到设备上的磁盘时会被加密 我们希望在特定路径上利用 Firebase 同步来向用户推送更快的更新 当您执行以下操作时 Firebase
  • Angular2 *ngFor:“无法读取未定义的属性‘0’”

    我尝试从 JSON 文件获取数据来构建表单 这是我的模板的一部分 div class form group div
  • std::vector 可以利用小缓冲区优化吗?

    今天我和同事想知道是否可以实现 std vector 来利用小缓冲区优化 通过查看 C 11 草案 我在 23 3 1p8 读到 对于除数组之外的标准容器类型的容器 a 和 b 表达式 a swap b 应交换 a 和 b 的值 而不对各个
  • 从 Rust 中的 RefCell>> 获取引用

    我在从 RefCell gt 获取引用时遇到问题 有什么建议吗 struct Node
  • 为什么 var foo = null 编译

    我从 Kotlin 开始并试图理解一些东西 var foo String null未按预期编译 var foo String null应该是正确的语法并按预期进行编译 那么为什么var foo null编译 的类型foo在这种情况下将被推断
  • C++ 中空结构的用法

    在我正在阅读的一些代码中 我发现空结构的用法如下 struct input iterator tag struct bidirectional iterator tag struct random access iterator tag 所
  • 使用 AHK 关闭 Visual Studio 中的弹出对话框

    我重新映射了几个键 效果很好 然而 我在尝试摆脱视觉工作室中的弹出对话框时遇到了困难 这是我尝试过的 WinWaitActive Microsoft Visual Studio If WinActive Microsoft Visual S
  • 具有模板化构造函数以及复制和移动构造函数的类

    这个问题是这个问题的后续问题 模板类的模板构造函数的显式模板专业化另一个问题中给出的答案当然是正确的 但事实证明我并没有完全问我想问的问题 所以这是一个新问题 考虑以下代码 template
  • BufferedReader 相对于 Scanner 有什么好处

    这是关于图中深度优先搜索的代码 谁知道为什么在这段代码中使用 bufferedReader 类 为什么不使用 nextInt 函数来代替 它的特权是什么 是为了加快处理速度吗 谢谢 import java io BufferedReader
  • 为什么将二级子类化 Button 控件添加到 Grid 会产生 E_INVALIDARG?

    我在处理 C CX 中的 Windows UI Xaml Button 类的子类时遇到了这个问题 我想知道发生了什么 如果我将一个控件实例添加到网格中 一切都会按预期工作 如果我对控件进行子类化并添加一个实例subclass 一切都按预期进