2 XAML 对单个 C# 的引用 class(通用应用程序 8.1)

2 XAML reference to single C# class (Universal App 8.1)

小故事:你能将 2 XAML 引用到单个 C# class 中吗?如果是这样,如何在 XAML 中添加引用?

长话短说:我目前正在 VS 中制作适用于 8.1 的通用应用程序。在调查代码隐藏后,两个平台都有相同的代码(相同)。所以我的计划是将用于代码隐藏的 class 放在 Shared 文件夹中,但我仍然不知道如何同时制作 XAML (Windows 8.1 和 WP8 .1) 将此 class 称为代码隐藏。

我读过这一篇:How do you reference a class through xaml? 但这是针对 WPF 的,它将 class 指定为 static

编辑:我不会将 XAML 制作成共享文件,因为我已经将它们设计为特定平台

您可以只将 xaml.cs 文件放在共享项目中,或者为共享代码创建第三个文件并将其声明为部分文件。然后实施项目中的差异。

但是,如果您这样做,我认为您在向 xaml 添加事件处理程序时会遇到问题,就像您创建基础 class 并从中派生一样,因为处理程序将添加到本地项目,而不是共享项目。

一些想法(可能不完美):

  1. 将两个控件的 UI 添加到一个 XAML 文件中,然后只 hide/remove 不需要的那个。

  2. 使用 template (custom) control.

您可能正在寻找 XAML

中 Page 元素的 x:Class 属性

但是,最好为 windows 商店和 windows phone 项目中的每个 xaml 页面使用两个 xaml.cs 文件,并且将公共代码放在共享项目的单独 class 中。

更好的是,您可以将所有代码保留在共享项目中,并为 phone 和平板电脑使用单个 xaml 页面和单个 xaml.cs class ,通过使用 VisualStateManager。这是将应用程序移植到 Windows 10 时必须要做的事情,这是一个真正通用的应用程序。

尽量少用代码隐藏。 XAML 的设计考虑了 MVVM,因此代码隐藏应该最少,最好是空的。除了 MVVM,还有附加行为、自定义控件等,它们有助于从代码隐藏中移动代码。

如果您无法完全摆脱代码隐藏,请使用您常用的共享一段通用代码的策略 — 例如,只需将代码移至单独的 class,或使用 class层次结构。

请注意,除了 XAML 和代码隐藏之外,还有一个生成的文件将控件名称连接到控件字段等,因此代码比您看到的要多。代码隐藏依赖于此生成的代码,因此不能在同一项目内共享,即使代码相同。

共享项目中的文件算作引用共享项目的其他项目的一部分。当您构建特定于配置的项目时,文件是直接位于该项目中还是位于共享项目中并不重要。

这意味着您可以将 .xaml 文件保留在目标特定项目中,并将 .xaml.cs 文件移动到共享文件夹。

对于 Windows 10 中的通用 Windows 应用程序,它甚至更容易:控件将全部相同,因此您不需要单独的代码。如果您确实想针对不同的设备定制体验,则不需要共享项目,但可以使用设备限定符为不同的目标提供单独的 xaml 文件。

我在我的博客条目 Strategies for sharing code in XAML-based Universal apps

中讨论了使用部分 类 和资源字典来共享代码