Как я могу использовать расширение {x: Static...} для приложений Phone7 Silverlight?

Я пишу приложение 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

x:Static доступен только в WPF - ни Silverlight для браузера, ни Silverlight для Windows Phone 7 не поддерживают это расширение разметки.

Обычным обходным решением является создание (нестатического) класса, который обладает свойствами, которые просто переносят статические свойства, которые вы хотите, и создаете экземпляр этого как ресурса и привязываете его к нему таким образом.

Пример *:

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>

* Этот пример берется из ответа в Использование локализованных строк в ListPicker, заполненном Enum