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

4

我有一个用于Silverlight的复杂控件,现在需要在WPF中实现相同的功能。是否有办法共享代码库?


4
您可以为每个平台创建项目文件。该网址为:http://msdn.microsoft.com/en-us/library/x435tkbk.aspx - Jaroslav Jandek
@Jaroslav Jandek,感谢C.O. - user626528
有时候可以创建一个项目并将其他项目的文件作为链接添加进来。但是一些Silverlight控件具有不同的属性,因此条件编译应该会有所帮助。 - vortexwolf
2个回答

3

需要共享的主要有三个方面:

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

正如 Jaroslav 所指出的那样,您可以在代码文件中使用条件编译,C#VB.Net 均支持。请注意,Silverlight 项目默认将定义 SILVERLIGHT 符号,因此您可以在条件语句中使用它。

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

Xaml文件有些棘手,因为WPF支持的一些内容Silverlight不支持(例如自定义MarkupExtensions等)。实际上,我只需复制XAML文件并根据需要进行合并即可。
项目文件必须手动维护,这并不是太麻烦。

0

我写了一篇关于分享.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中控件的功能不同,使用样式

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接