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

i_a*_*orf 10 silverlight xaml static constants windows-phone-7

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

但是,Visual Studio一直声称它不知道x:static.这里的秘诀是什么?我有以下内容:

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

  <Image Height="{x:Static App.ImageHeight}" ... />
  ...
Run Code Online (Sandbox Code Playgroud)

而且当然:

public partial class App : Application
{
  public const double ImageHeight = 100;
  ...
Run Code Online (Sandbox Code Playgroud)

错误消息是"找不到类型'x:静态'.验证...".

Aus*_*amb 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; } }
}
Run Code Online (Sandbox Code Playgroud)

在资源(app.xaml)中:

<ResourceDictionary>
    <local:StaticSideEnums x:Key="StaticSideEnums"/>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)

在使用它的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>
Run Code Online (Sandbox Code Playgroud)

*此示例取自在Enum中填充的ListPicker使用本地化字符串的答案

  • 对于您的具体用例,也许Style会更好?然后你可以将高度设置为你想要的任何东西,在所有Image元素上使用该Style,并获得相同级别的"一次更改,随处应用". (2认同)