Silverlight 4等效于WPF“x:static”

juzqafwq  于 2023-04-13  发布在  其他
关注(0)|答案(2)|浏览(146)

我正在做一个项目,这个项目是基于一个有人开始但没有完成的旧项目。我试图尽可能多地使用他们的代码,所以在这样做的过程中,我遇到了一些调整问题。
也就是说,当我将一些旧的xaml放到新项目中时,抛出了一些关于“x:static”属性和“Dynamic”属性的错误。
以下是错误消息本身:
错误1:未找到类型“DynamicResource”。请验证未缺少程序集引用并且已生成所有引用的程序集。
错误2:找不到类型“x:Static”。请验证没有缺少程序集引用,并且已生成所有引用的程序集。
一些值得注意的点,我认为是导致错误:原项目采用VS 2008、WPF、v3.5 .Net框架编写;而我在VS2010,Silverlight 4,.Net Framework v4.0中编程。
我意识到从WPF到Silverlight就xaml而言有很多不同之处,而且从不同的.Net框架版本和Visual Studio版本也有很多不同之处。但我似乎在任何地方都找不到解决这个问题的方法,所以我不知道是否只是缺少了一个库,或者只是我忽略了什么。
如果需要的话,我可以重新创建它,但是就像我说的,我宁愿尽可能多地使用旧代码,只要调整不会引起比它的价值更多的麻烦。

kqhtkvqz

kqhtkvqz1#

不幸的是,您不能在Silverlight的XAML子集中直接使用DynamicResourceStatic关键字,但您可以模仿它们的行为。以下是有关该主题的文章:

一般来说,将项目从WPF迁移到Silverlight并不容易。它们有很多共同点,但严格来说是不同的技术。

xwmevbvl

xwmevbvl2#

实现绑定到静态属性的另一种方法-在代码中绑定。下面是一个示例。
主要应用类别:

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的检查方法,无论是否已经设置了绑定,都不是最优雅的方法,但它是有效的。

相关问题