如何使用Phone7 Silverlight应用程序的{x:Static ...}扩展名?

时间:2011-01-16 23:06:41

标签: silverlight xaml windows-phone-7 static constants

我正在编写一个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:Static'。验证...”。

1 个答案:

答案 0 :(得分:17)

x:Static仅在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

中的答案