2009-05-10 3 views
11

Я новичок в .NET-программировании и пытаюсь изучить Silverlight 2/C#.Как делиться числовой константой между xaml и C# в silverlight

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

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

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

TIA!

Ответить Michael

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

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

Я начинаю с примера из «Pro Silverlight 2 в C# 2008». Пример отлично работает, но мне нужно жестко закодировать те же два значения в двух местах в моем XAML и одно место на моем C#.

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

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

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

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

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

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

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

Я запускаю VS2008 SP1 и март 09 Silverlight toolkit.

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

Другой ответ Майклу

Вы правильно, я не добавил Xmlns: SYS заявление на мой Page.xaml, но не добавляя это никакой разницы - я все еще получаю «необъявленная prefix [Line: 6 Position: 30] 'error в Page.xaml (и приложение все еще работает). Поскольку все работает нормально, я думаю, это должно быть проблемой в VS2008.

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

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

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

+0

Что делает XAML выглядит так же, как и для вашего page.xaml. Вы, вероятно, пропустили объявление пространства имен xmlns: sys на странице pagex.xaml. –

ответ

19

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

<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}"/> 
+0

Начиная с XAML 2009, ваше определение ресурса будет « 8'. Это относится к Windows 8 и Windows Phone 8.1. См. Http://msdn.microsoft.com/en-us/library/ee792002(v=vs.110).aspx. – danhbear

Смежные вопросы