2011-03-13 38 views
4

我有一個Silverlight的複雜控件,我需要在WPF中具有相同的功能。任何方式來分享代碼庫?是否可以爲WPF和Silverlight編譯相同的控件?

+4

http://msdn.microsoft.com/en-us/library/x435tkbk.aspx +您可以爲每個平臺創建項目文件。 – 2011-03-13 09:03:52

+0

@Jaroslav Jandek,謝謝C.O. – user626528 2011-03-13 09:07:44

+0

有時可以創建項目並將其他項目的文件添加爲鏈接。但是一些Silverlight控件具有不同的屬性,所以條件編譯應該有所幫助。 – vorrtex 2011-03-13 16:15:26

回答

3

實際上是由三個方面,將需要共享:

  1. 代碼文件(例如*的.cs *的.vb)
  2. XAML文件(包括主題)
  3. 項目文件(例如爲*的.csproj和* .vbproj)

由於雅羅指出的那樣,你可以使用代碼文件,這是由C#VB.Net支持有條件的併發症。請記住,Silverlight項目將默認定義SILVERLIGHT符號,以便您可以在條件語句中使用它。

代碼文件的另一個技巧是使用partial classes。這使您可以將僅適用於Silverlight或WPF(但不是兩個)的整個代碼塊放在單個文件中。然後在您的項目中選擇性地包含該文件。

XAML文件是一個有點艱難,因爲有通過WPF支持幾件事情是不支持Silverlight(如自定義MarkupExtensions等)。在實踐中,我只需複製XAML文件並根據需要進行合併。

項目文件必須手動維護,這不是一件麻煩事。

0

我寫了一個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不同的功能。

相關問題