是否可以为WPF和Silverlight编译相同的控件?

时间:2011-03-13 09:00:52

标签: c# .net wpf silverlight

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

2 个答案:

答案 0 :(得分:3)

实际上需要分享三个方面:

  1. 代码文件(例如* .cs * .vb)
  2. XAML文件(包括主题)
  3. 项目文件(例如* .csproj和* .vbproj)
  4. 正如Jaroslav指出的那样,您可以对代码文件使用条件复杂化,C#VB.Net支持这些代码文件。请记住,Silverlight项目默认定义SILVERLIGHT符号,因此您可以在条件语句中使用它。

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

    Xaml文件有点难度,因为Silverlight不支持WPF支持的一些内容(例如自定义MarkupExtensions等)。实际上,我只需复制XAML文件并根据需要进行合并。

    项目文件必须手动维护,这不是一件容易的事。

答案 1 :(得分:0)

我写了一篇关于共享.xaml文件的blog article。我们的想法是在您的源代码中创建代理控件,并在.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