Как делиться числовой константой между xaml и С# в silverlight

Я новичок в .NET-программировании и пытаюсь изучить Silverlight 2/С#.

Мне нужно объявить числовые константы (или, еще лучше, переменные readonly), и получить к ним доступ как в XAML, так и в файле с кодом С#.

Эти значения более точно определены в XAML, но если определение должно быть выполнено на С#, это лучше, чем жесткое кодирование значения в нескольких местах.

Я нашел решение для WPF XAML, но Silverlight, по-видимому, не поддерживает синтаксис (и найденное решение, которое должно быть определено в файле С#).

ТИА!

Ответ Майклу

Я добавляю этот ответ в качестве комментария к исходному вопросу, потому что редактор комментариев не позволяет мне добавить этот текст, и я не мог найти другого способа ответить на ваш ответ.

Спасибо за ответ, Майкл, но я, похоже, не могу заставить его работать.

Im, начинающийся с примера из "Pro Silverlight 2 в С# 2008". Этот пример отлично работает, но мне нужно жестко закодировать те же два значения в двух местах в моем XAML и одно место на моем С#.

Я реализовал ваше решение, и все построено отлично, но когда я попытался выполнить код, у меня появилась ошибка страницы в браузере. Я удалил все изменения и проверил, что все в порядке.

Затем я добавил объявление xmlns: sys и sys: Int32 в файл App.xaml. Все снова закончилось нормально, но когда я попытался просмотреть файл Page.xaml в VS2008, у меня возникла странная ошибка:

необъявленный префикс [Строка: 6 Позиция: 30] - Страница .xmal, Строка 1, Столбец 1

Страница предварительного просмотра была пуста.

В Line 6, Col 30 страницы Page.xaml не было ничего интересного, но в файле App.xaml это место содержит закрытие " > " непосредственно перед целым значением 8:

  <sys:Int32 x:Key="QAPS">8</sys:Int32>

Если я ударил F5, приложение отлично работает в браузере.

Im работает VS2008 SP1 и март 09 Silverlight toolkit.

Я не могу понять, почему объявление QAPS в разделе ресурсов приложений App.xaml может вызвать, особенно учитывая, что я не ссылаюсь на него нигде в приложении. Вы хоть представляете, что может быть?

Еще один ответ Майклу

Вы верно, я не добавил объявление xmlns: sys на свой файл page.xaml, но добавление его не имело значения - я все еще получаю "необъявленный префикс [Line: 6 Position: 30] error в Page.xaml(и приложение все еще работает). Поскольку все работает нормально, я предполагаю, что это должно быть проблемой в VS2008.

Большая проблема заключалась в том, что я получал исключение во время выполнения, когда пытался получить доступ к QAPS с С#, и Ive выяснил, что я делаю неправильно, чтобы вызвать это. Проблема заключалась в том, что я, по-видимому, обращался к ресурсу до его существования.

Я объявил/инициализировал закрытую переменную, чтобы сохранить значение ресурса на уровне класса; когда я переместил инициализацию в обработчик событий, проблема исчезла. Поэтому я предполагаю, что переменные уровня класса С# оцениваются до создания ресурсов XAML.

(В стороне, ограничение на личность в 600 символов - это настоящая боль. Как бы то ни было, мне нужно отредактировать свой оригинальный вопрос, чтобы опубликовать ответ).

Ответ 1

Поместите их в ресурсы приложения или страницы:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <Application.Resources>
        <sys:Int32 x:Key="QPS">8</sys:Int32>
    </Application.Resources>
</Application>

Затем вы можете получить к ним доступ через код следующим образом:

if (Application.Current.Resources.Contains("QPS"))
{
    int callsPerSecond = (int) Application.Current.Resources["QPS"];
}

и через Xaml, как этот

<TextBlock Text="{StaticResource QPS}"/>