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

Я пишу приложение 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: Статический »не найден. Убедитесь, что ...».

1 Ответ

17 голосов
/ 17 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...