【问题标题】:Is it possible to compile the same control for both WPF and Silverlight?是否可以为 WPF 和 Silverlight 编译相同的控件?
【发布时间】:2011-03-13 09:00:51
【问题描述】:

我有一个用于 Silverlight 的复杂控件,并且我需要在 WPF 中具有相同的功能。有什么方法可以共享代码库?

【问题讨论】:

  • msdn.microsoft.com/en-us/library/x435tkbk.aspx + 你可以为每个平台创建项目文件。
  • @Jaroslav Jandek,谢谢 C.O.
  • 有时可以创建一个项目并将来自其他项目的文件添加为链接。但是某些 Silverlight 控件具有不同的属性,因此条件编译应该会有所帮助。

标签: c# .net wpf silverlight


【解决方案1】:

确实需要分享三个方面:

  1. 代码文件(如 *.cs *.vb)
  2. XAML 文件(包括主题)
  3. 项目文件(如 *.csproj 和 *.vbproj)

正如 Jaroslav 所指出的,您可以对代码文件使用条件复杂化,C#VB.Net 支持。请记住,Silverlight 项目将默认定义 SILVERLIGHT 符号,因此您可以在条件语句中使用它。

代码文件的另一个技巧是使用partial classes。这允许您将可能仅适用于 Silverlight 或 WPF(但不能同时适用于两者)的整个代码块放在一个文件中。然后有选择地将该文件包含在您的项目中。

Xaml 文件有点困难,因为 WPF 支持的一些东西不受 Silverlight 支持(例如自定义 MarkupExtensions 等)。在实践中,我只是复制 XAML 文件并根据需要合并。

项目文件必须手动维护,没有那么麻烦。

【讨论】:

    【解决方案2】:

    我写了一个blog article 来分享.xaml 文件。这个想法是在您的源代码中创建一个代理控件并在.xaml 中使用该控件:

    namespace UnifiedXaml
    {
        public class MyWrapPanel: WrapPanel { }
    }
    


    <UserControl x:Class="UnifiedXaml.TestControl"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:ux="clr-namespace:UnifiedXaml">
        <ux:MyWrapPanel></ux:MyWrapPanel>
    </UserControl>
    

    如果控件在 WPF 和 Silverlight 中具有不同的功能,use styles

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多