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

C# 是否可以为WPF和Silverlight编译相同的控件?,c#,.net,wpf,silverlight,C#,.net,Wpf,Silverlight,我有一个Silverlight的复杂控件,我需要在WPF中具有相同的功能。有没有共享代码库的方法?确实有三个方面需要共享: 代码文件(如*.cs*.vb) XAML文件(包括主题) 项目文件(如*.csproj和*.vbproj) 正如Jaroslav指出的,您可以对代码文件使用条件复杂度,这是由和支持的。请记住,默认情况下Silverlight项目将定义Silverlight符号,因此您可以在条件语句中使用该符号 代码文件的另一个技巧是使用。这允许您将可能仅适用于Silverlight或WPF

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

确实有三个方面需要共享:

  • 代码文件(如*.cs*.vb)
  • XAML文件(包括主题)
  • 项目文件(如*.csproj和*.vbproj)
  • 正如Jaroslav指出的,您可以对代码文件使用条件复杂度,这是由和支持的。请记住,默认情况下Silverlight项目将定义Silverlight符号,因此您可以在条件语句中使用该符号

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

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

    项目文件必须手动维护,这不是什么大麻烦。

    我写了一篇关于共享
    .xaml
    文件的文章。其思想是在源代码中创建一个代理控件,并在
    .xaml
    中使用该控件:

    namespace UnifiedXaml
    {
        public class MyWrapPanel: WrapPanel { }
    }
    

    
    

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

    +您可以为每个平台创建项目文件。@Jaroslav Jandek,谢谢C.O。有时可以创建项目并将其他项目中的文件添加为链接。但是有些Silverlight控件具有不同的属性,因此条件编译应该会有所帮助。
    <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>