2 XAML引用单个C#类(Universal App 8.1)

时间:2015-05-22 20:19:54

标签: c# xaml win-universal-app

短篇小说:你可以将2个XAML引用到单个C#类中吗?如果是这样,你如何在XAML中添加引用?

长篇故事:我目前正在VS中制作8.1的通用应用程序。在调查代码隐藏后,两个平台都有相同的代码(相同)。所以我的计划是将代码隐藏在Shared文件夹中,但我仍然不知道如何使这两个XAML(Windows 8.1和WP8.1)作为代码引用此类-behind。

我读过这篇文章:How do you reference a class through xaml? 但这适用于WPF,它将类指定为static

编辑:我没有将XAML变成共享文件,因为我已经将它们设计为特定于平台的

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您可能正在寻找XAML中

但是,最好在Windows应用商店和Windows Phone项目中为每个xaml页面使用两个xaml.cs文件,并在共享项目的单独类中使用公共代码。

更好的是,您可以将所有代码保存在共享项目中,并使用VisualStateManager为手机和平板电脑使用单个xaml页面和单个xaml.cs类。这是将应用程序移植到Windows 10时必须执行的操作,这是一个真正的通用应用程序。

答案 2 :(得分:1)

尝试尽可能少地使用代码隐藏。 XAML在设计时考虑了MVVM,因此代码隐藏应该是最小的,理想情况下是空的。除了MVVM之外,还有附加的行为,自定义控件等,这有助于从代码隐藏中移动代码。

如果您无法完全摆脱代码隐藏,请使用您通常的共享代码的策略 - 例如,将代码移动到单独的类中,或者使用类层次结构。

请注意,除了XAML和代码隐藏之外,还有一个生成的文件,它将控制名称连接到控制字段等,所以代码比你看到的多。代码隐藏依赖于生成的代码,因此即使代码相同,它也无法在同一个项目中共享。

答案 3 :(得分:0)

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

  1. 将两个控件的UI添加到一个XAML文件中,然后隐藏/删除不需要的控件。

  2. 使用template (custom) control

答案 4 :(得分:0)

共享项目中的文件计为引用共享项目的其他项目的一部分。当您构建特定于配置的项目时,如果文件直接位于该项目中或者是否位于共享项目中,则无关紧要。

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

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

我讨论使用部分类和资源字典在我的博客条目Strategies for sharing code in XAML-based Universal apps

中共享代码