在XAML中使用在Silverlight中的代码中创建的静态对象

我无法在Silverlight中使用它,所以我创建了两个测试项目。 一个简单的WPF项目和一个简单的Silverlight项目,它们只做一件事:在代码中设置一个公共静态只读变量,并在一个完全裸的XAML中使用它。 在WPF中,工作顺利。 在Silverlight中,我收到以下编译器警告和运行时错误:

警告2 XML名称空间“ http://schemas.microsoft.com/winfx/2006/xaml ”中不存在“静态”标记…

属性Text的属性值{x:Static SilverlightApplication3:Page.Test}无效。 [线路:7位置:25]

我假设Silverlight 2不支持这个,或者我只是遗漏了一些非常简单的东西? 这是两者的完整代码,以防万一是后者:

public partial class Window1 : Window { public static readonly string Test = "test"; public Window1() { InitializeComponent(); } }      

这是SL版本:

 public partial class Page : UserControl { public static readonly string Test = "test"; public Page() { InitializeComponent(); } }      

不幸的是,看起来Silverlight不支持绑定到静态属性: 什么是{x:Static sdfsdf}等价物?

不幸的是,Silverlight在function方面有很多限制,你刚刚找到其中一个。 SL2不支持StaticMarkupExpression。 您也无法自己定义它。

例如来自ms的家伙: http : //blogs.msdn.com/edmaia/archive/2008/11/23/animating-objects-visibility-in-silverlight.aspx

诀窍可能是使用像这样的对象

 class Helper{ public string Value {get{return Page.Test;}} // implement INotifyPropertyChange if you want updates } 

然后

     

只要该类不是静态类,您实际上可以绑定到静态属性。 所以使用前面的Helper类示例:

 public class Helper { public static string Value{ get {return Page.Test;} } } 

XAML将保持不变。

我刚刚注意到你有一个关于绑定到颜色的次要问题。 我不认为它可以在Silverlight中完成。 我很确定Silverlight中绑定目标的最低要求是FrameworkElement。

静态对象只会被实例化一次并持续到程序结束。静态对象即使不在范围内也可以保留其状态,但只能在其本地范围内可见。