2010-07-30 78 views
21

我正在開發一個項目,該項目基於某個已啓動並未完成的舊項目。我試圖儘可能多地使用他們的代碼,所以我這樣做時遇到了一些調整問題。Silverlight 4相當於WPF「x:static」

也就是說,當我在新項目中放入一些舊的xaml時,出現了關於「x:static」屬性和「動態屬性」的一些錯誤。

這裏的錯誤消息本身:

錯誤1:類型 'DynamicResource' 沒有 發現。確認您沒有錯過 程序集參考,並且所有 引用程序集都已構建。

錯誤2:未找到'x:Static'類型。 確認您沒有遺漏 裝配參考,並且所有 引用的裝配都已生成。

一些值得注意的點,我認爲是造成的錯誤:舊項目編程在VS2008,WPF,v3.5 .Net框架;而我在VS2010,Silverlight 4,.Net框架v4.0編程。

就xaml而言,我意識到WPF和Silverlight之間存在差異,並且Visual Studio的不同.N​​et框架版本和版本之間存在很多差異。但我似乎無法在任何地方找到解決辦法,所以我不知道是否只有一個我錯過的圖書館,或者只是我忽略了什麼。

如果需要,我可以重新創建它,但就像我說過的,我寧願儘可能多地使用舊的代碼,只要調整不會造成比它的價值更大的麻煩。

回答

15

不幸的是,你不能直接使用DynamicResource靜態關鍵字XAML的Silverlight的子集,但你可以模仿他們的行爲。下面是關於這個專題的文章:

一般情況下,有沒有簡單的方法來從遷移到WPF Silverlight的一個項目。他們有很多共同點,但嚴格來說是一種不同的技術。

+1

我完全同意不容易將WPF項目遷移到Silverlight。儘管我會給這些機會。非常感謝! – AmbiguousX 2010-07-30 18:26:30

+0

不客氣) – n535 2010-07-30 19:05:45

+0

「模仿Silverlight 3中的DynamicResource」鏈接已死亡。 – 2011-08-29 14:47:46

2

實現綁定到靜態屬性的另一種方法 - 在代碼中進行綁定。下面是一個例子。

主要應用類:

public partial class App : Application 
{ 
    public static MyViewModel MyViewModel { get; private set; } 

    // ... 
} 

主窗口標記:

<TextBlock Loaded="MyTextBlockLoaded" /> 

主窗口後臺代碼:

public partial class MainPage : PhoneApplicationPage 
{ 
    // ... 

    private void MyTextBlockLoaded(object sender, RoutedEventArgs e) 
    { 
     TextBlock textBlock = ((TextBlock)sender); 
     if (textBlock.Tag == null) 
     { 
      textBlock.Tag = true; 
      Binding bind = new Binding("MyInfo"); 
      bind.Source = App.MyViewModel; 
      bind.Mode = BindingMode.OneWay; 
      textBlock.SetBinding(TextBlock.TextProperty, bind); 
     } 
    } 
} 

也許檢查的TextBlock.Tag的做法,是有約束力已經設置或不,不是最優雅的,但它的工作原理。