2010-07-30 49 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的做法,是有约束力已经设置或不,不是最优雅的,但它的工作原理。