如何为Phone7 Silverlight应用程序使用{x:Static …}扩展?

我正在编写一个Phone 7应用程序,我想在标记中引用常量值.我相信应该这样做的方式是通过 x:Static.

但是,Visual Studio不断声称它不知道x:static.这里有什么秘密酱?我有以下几点:

<phone:PhoneApplicationPage 
  ...
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  ...

  <Image Height="{x:Static App.ImageHeight}" ... />
  ...

而且当然:

public partial class App : Application
{
  public const double ImageHeight = 100;
  ...

错误消息是“类型”x:没有找到静态“验证…”.

解决方法

x:静态仅在WPF中可用 – 浏览器的Silverlight或Windows Phone 7的Silverlight都不支持此标记扩展名.

通常的解决方法是创建一个(非静态)类,该类具有简单包装所需静态属性的属性,并创建一个实例作为资源,并以此方式绑定.

例*:

public class StaticSideEnums
{
    public static Side Bid { get { return Side.Bid; } }
    public static Side Ask { get { return Side.Ask; } }
}

在资源(app.xaml)中:

<ResourceDictionary>
    <local:StaticSideEnums x:Key="StaticSideEnums"/>
</ResourceDictionary>

在使用它的xaml中:

<toolkit:ListPicker Name="picker" SelectionChanged="OnSelectionChanged">
    <toolkit:ListPickerItem Content="Buy"  Tag="{Binding Bid,Source={StaticResource StaticSideEnums}}" />
    <toolkit:ListPickerItem Content="Sell" Tag="{Binding Ask,Source={StaticResource StaticSideEnums}}" />
</toolkit:ListPicker>

*这个例子取自Using localized strings in a ListPicker populated from Enum的答案

相关文章

如何在Silverlight4(XAML)中绑定IsEnabled属性?我试过简单的...
我正在编写我的第一个vb.net应用程序(但我也会在这里标记c#,...
ProcessFile()是在UIThread上运行还是在单独的线程上运行.如...
我从同行那里听说,对sharepoint的了解对职业生涯有益.我们不...
我正在尝试保存一个类我的类对象的集合.我收到一个错误说明:...
我需要根据Silverlight中的某些配置值设置给定控件的Style.我...