gpt4 book ai didi

WPF:在运行时将带有功能的页面作为 XAML 添加到窗口中

转载 作者:行者123 更新时间:2023-12-01 21:26:38 25 4
gpt4 key购买 nike

我创建了一个 WPF 应用程序,在其中使用 C# 代码动态构建 XAML 元素,然后将它们添加到根“容器”网格中。

我想做的是利用 Blend 中的功能并创建一些 XAML 页面,这些页面拥有自己的逻辑、 Storyboard等代码集。

我想在运行时加载该 XAML,但是由于某种原因我的方法不起作用,而且我不知道为什么。

这就是我之前所做的。在我的根窗口中,我创建一个新的 MyModule 并将其添加到我的 contentRoot 中。

 myModule = new MyModule();
contentRoot.Children.Add(myModule );

(有效的方法)MyModule 类扩展了 Canvas,并由 .XAML 文件和 .CS 代码隐藏文件组成。 XAML 只是一个根 Canvas ,.CS 具有创建元素并将它们添加到根 Canvas 的所有逻辑。

当我使用同样的方法时,MyModule 现在扩展了 Page,什么也没有显示。 XAML 现在包含大量内容,包括 Canvas.Resources Canvas.Triggers 和一堆其他元素。

如何从类中加载预先创建的 XAML 内容(包括运行时逻辑背后的代码)?

最佳答案

Page 和 Canvas 是 XAML 中两种不同类型的组件。

Page是框架元素,Canvas是Container,可以放置多个以绝对x,y坐标放置的控件。在其他情况下,Page 只有一个属性“内容”,您可以将 Page 视为高级内容控件。

Blend 必须创建与 Canvas 相关的方法,例如“Canvas.SetLeft”等,但它们肯定无法在 Page 中使用。

您的 Page 类必须有一个“Canvas”类型的内容,并且您必须在页面内的“Canvas”内添加所有控件,这将对您有所帮助。

这是来自 MSDN 的文本,

A Page can have only a single child element. All other elements on a Page must be descendents of that element. Typically, the content of a Page hosts a layout element—such as Grid, StackPanel, and DockPanel—that hosts the content of the Page.

在您的情况下,页面应托管一个元素“Canvas”并添加项目。

或者你为什么不尝试这个,让你的 MyModule 与它原来的一样,然后创建一个新页面,名为 MyModulePage,它应该看起来像这样。

<MyModulePage>
<MyModule/> <!-- that is your canvas generated in blend -->
</MyModulePage>

关于WPF:在运行时将带有功能的页面作为 XAML 添加到窗口中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1262770/

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