Элемент управления браузера Silverlight
Свойства элемента управления Silverlight
Элемент управления Silverlight имеет ряд свойств, некоторые из которых уже обсуждались в разделе "Размещение Silverlight в браузере". Свойства могут задаваться не только при инициализации элемента управления, но также с помощью сценария. Элемент управления разделяет свойства на три типа: непосредственные свойства, свойства содержимого и свойства настроек. Непосредственные свойства - это свойства самого элемента управления, которые доступны посредством синтаксиса control.uMnceoucmea. Доступ к свойствам содержимого и настроек осуществляется посредством синтаксиса control.content.uMxceoucmea и control.settings.uMnceoucmea, соответственно.
Непосредственные свойства
Ниже перечислены поддерживаемые непосредственные свойства:
- initParams В этом свойстве хранятся параметры инициализации, передаваемые в элемент управления. Оно может быть задано только как часть инициализации элемента управления.
- isLoaded Это свойство принимает значение true после загрузки элемента управления; в противном случае, оно имеет значение false. Является доступным только для чтения.
- source Это XAML-содержимое, визуальное представление которого должно быть сформировано. Это может быть ссылка на файл, URI службы, формирующей XAML, или (в случае присутствия префикса #) DIV, содержащий XAML-код в блоке сценария.
Свойства содержимого
Для организации доступа к свойствам содержимого используется синтаксис control.content.uMnceoucmea. Например, если необходимо обратиться к свойству actualHeight, используется синтаксис control.content.actualHeight Доступны следующие свойства содержимого:
- actualHeight Возвращает высоту области отображения элемента управления Silverlightin в пикселах. Возвращаемое значение зависит от ряда критериев. Во-первых, от того, как высота элемента управления была задана изначально. Вспомним, что это может быть процентное соотношение или абсолютное значение в пикселах. В первом случае, свойство actualHeight возвращает текущую высоту элемента управления, но если пользователь изменит размеры браузера, ее значение изменится. Если высота задана абсолютным значением, будет возвращено это значение. При использовании элемента управления в полноэкранном режиме, это свойство будет возвращать разрешающую способность экрана по вертикали.
- actualWidth Возвращает ширину экрана. Возвращаемое значение зависит от ряда критериев и аналогично параметру actualHeight.
- fullScreen Переключает режим отображения элемента управления Silverlight между встроенным и полноэкранным режимами. По умолчанию имеет значение false, что обозначает встроенный режим. Когда этому свойству задано значение true, элемент управления Silverlight будет отображаться во весь экран.
Свойства настроек
Элемент управления Silverlight также имеет ряд свойств, которые определены как свойства настроек. Доступ к этим свойствам осуществляется посредством синтаксиса control.settings.uMnceoucmea:
- background Это свойство задает цвет фона элемента управления Silverlight. Может принимать значения в нескольких форматах, включая именованный цвет (например, Black ), 8-разрядные значения Red/Green/Blue (RGB) с или без альфа-канала и 16-разрядные RGB -значения с или без альфа-канала.
- enableFrameRateCounter ( Счетчик частоты кадров включен ) Если задано значение true, Silverlight будет отображать текущую частоту кадров (в кадрах в секунду) в строке состояния браузера. Значение по умолчанию - false.
- enableHtmlAccess ( Html-доступ включен ) Если задано значение true, XAML-содержимое становится доступным из DOM браузера. Значение по умолчанию - true.
- enableRedrawRegions ( Перерисовка областей включена ) Если задано значение true, отображаются области объекта подключаемого модуля, перерисовываемые в каждом кадре. Это полезный инструмент оптимизации приложения. Значение по умолчанию -false.
- maxFrameRate ( Максимальная частота кадров ) Определяет максимальную генерируемую частоту кадров. По умолчанию принимает значение 24 и имеет абсолютный максимум 64.
- version ( версия ) Сообщает об используемой в настоящий момент версии элемента управления Silverlight. Это строка, содержащая до четырех разделенных точками целых чисел: основной, дополнительный номера версий, номер сборки и номер редакции, - хотя обязательными являются только первые два значения (основной и дополнительный номер версии).
- windowless Это свойство определяет режим отображения элемента управления: безоконный или оконный. Если задано значение true, используется безоконный режим, т.е. содержимое Silverlight отображается на странице "за" HTML-содержимым.
Методы элемента управления Silverlight
Элемент управления Silverlight имеет ряд методов, которые могут использоваться для управления его поведением и функционированием. Аналогично группам свойств Silverlight, методы Silverlight тоже сгруппированы в "семейства" методов. В настоящее время поддерживаются один непосредственный метод и три метода содержимого. Что есть что, будет представлено в следующих разделах, включая примеры, демонстрирующие синтаксис этих методов и способ доступа к ним.
Метод createFromXaml
Метод createFromXaml (создать из Xaml) является методом содержимого Silverlight, позволяющий задавать XAML-содержимое, которое динамически добавляется в элемент управления Silverlight. Этот метод принимает два параметра. Первый - строка, содержащая XAML, который будет использоваться, и второй - параметр namescope (область имен). Если второй параметр имеет значение true (значением по умолчанию является false ), в предоставленном XAML будут созданы уникальные ссылки x:Name, которые не будут конфликтовать с именами существующих XAML-элементов.
Для createFromXaml существует ограничение: в добавляемом XAML должен быть всего один корневой узел. Поэтому, если необходимо добавить несколько элементов, убедитесь, что все они располагаются в одном узле, включающем элемент Canvas.
Кроме того, createFromXaml не добавляет XAML в элемент управления Silverlight до тех пор, пока он не будет добавлен в дочерний элемент одного из элементов Canvas элемента управления. Итак, при вызове createFromXaml вы получаете ссылку на узел, и эта ссылка затем используется для добавления этого узла в дерево визуального представления. Рассмотрим пример:
function handleLoad(control, userContext, sender) { var xamlFragment = '<TextBlock Canvas.Top="60" Text="A new TextBlock" />'; textBlock = control.content.createFromXaml(xamlFragment); sender.children.add(textBlock); }
Здесь создается XAML-код для элемента управления TextBlock с текстом "A new TextBlock" (Новый TextBlock). Этот XAML-код затем используется для создания XAML-узла в содержимом элемента управления. Когда это будет выполнено, Silverlight возвратит ссылку на TextBlock. Эта ссылка добавляется в дерево визуального представления элемента управления Silverlight и используется для прорисовки TextBlock.
Метод createFromXamlDownloader
Метод createFromXamlDownloader (создать из загрузчика Xaml) является методом содержимого, используемым в паре с объектом Downloader (Загрузчик), который будет рассмотрен в данной лекции позже. Этот метод принимает два параметра. Первый параметр - ссылка на объект Downloader, который загружает XAML-код или пакет, содержащий XAML-код. Второй параметр - имя пакета загружаемого содержимого, который должен использоваться. Если это .zip-файл, задается имя файла, содержащегося в .zip-архиве, в котором находится XAML-код, который предполагается использовать. Если загруженное содержимое не в пакете .zip, в качестве значения этого параметра должна быть задана пустая строка.
Метод createObject
Метод createObject (создать объект) является непосредственным методом, предназначенным для создания одноразового объекта для определенной функции. В Silverlight единственным таким поддерживаемым объектом является Downloader. Более подробно остановимся на этом в данной лекции позже.
Метод findName
Этот метод содержимого позволяет выполнять поиск узла в XAML-коде по атрибуту x:Name. Если findName (найти имя) находит узел с заданным именем, он возвращает ссылку на него, в противном случае, возвращается null.
Объект Downloader
Элемент управления Silverlight предоставляет объект, который обеспечивает возможность загружать дополнительные элементы, используя функциональность асинхронной загрузки. Это позволяет скачивать отдельные ресурсы или ресурсы в виде .zip-архива.
Свойства объекта Downloader
Объект Downloader поддерживает следующие свойства:
- downloadProgress ( показатель процесса загрузки ) Это свойство обеспечивает нормализованное значение (между 0 и 1), которое представляет объем загруженного содержимого в процентном соотношении к его общему размеру, где значение 1 эквивалентно 100% загрузки.
- status ( состояние ) Это свойство принимает код состояния HTTP для текущего состояния процесса загрузки. Возвращает стандартный код состояния HTTP, например, "404" для "Not Found" (не найден) или "200" для "OK".
- statusText ( текст состояния ) Это свойство принимает текст состояния HTTP для текущего состояния процесса загрузки. Он соответствует коду состояния для свойства status. Для успешного запроса status будет равен "200", и statusText будет "OK". Для получения дополнительной информации по кодам состояния HTTP посмотрите стандартные коды HTTP, опубликованные W3C (http//www.w3. org/Protocols/rfc2616/rfc2616-sec10.html).
- uri Это свойство содержит URI объекта, к которому в настоящий момент обращается загрузчик.
Методы объекта Downloader
Объект Downloader поддерживает следующие методы:
- abort ( отменить ) Отменяет текущую загрузку и возвращает все свойства в исходное состояние.
- getResponseText ( получить текст ответа ) Возвращает строковое представление загруженных данных. Принимает обязательный параметр, который используется для указания именованного блока в загружаемом пакете.
- open ( открыть ) Запускает сеанс загрузки. Принимает три параметра. Первый - команду действия. Набор команд HTTP задокументирован W3C; однако, Silverlight поддерживает только GET (Получить). Второй параметр - URI ресурса, который должен будет загружаться.
- send ( отправить ) Выполняет запрос загрузки, который был запущен командой open.
События объекта Downloader
Объект Downloader поддерживает следующие события:
- completed ( завершен ) Это событие формируется по завершении загрузки. Оно принимает два параметра. Первый - объект, сформировавший это событие (в данном случае, сам элемент управления downloader), и второй - набор аргументов события ( eventArgs ).
- downloadProgressChanged ( показатель процесса загрузки изменился ) Это событие формируется в ходе загрузки. Оно формируется при каждом изменении показателя процесса загрузки (значение которого меняется от 0 до 1) на 0,05 (5%) или более, а также когда он достигает значения 1,0 (100%). По достижении 1,0 также формируется событие completed.
Использование объекта Downloader
Объект Downloader позволяет выполнять доступ к ресурсам сети из JavaScript. Пожалуйста, обратите внимание, что этот объект будет работать, только если приложение Silverlight выполняется с Вебсервера, и будет формировать ошибку в случае загрузки страницы просто из файловой системы.
Объект Downloader создается методом createObject, предоставляемым элементом управления Silverlight. Рассмотрим пример:
< script type="text/javascript" > function handleLoad(control, userContext, sender) { var downloader = control.createObject("downloader"); } </script>
Следующий шаг - запустить сеанс загрузки. Для этого с помощью метода open объекта Downloader объявляется URI файла и вызывается метод send для начала загрузки. Далее представлен пример, в котором выполняется загрузка файла фильма movie.wmv:
function handleLoad(control, userContext, sender) { var downloader = control.createObject("downloader"); downloader.open ("GET","movie.wmv"); downloader.send(); }
Для отслеживания процесса загрузки и момента ее завершения понадобится создать соответствующие обработчики событий. Далее представлена та же функция, но в нее были внесены необходимые дополнения:
function handleLoad(control, userContext, sender) { var downloader = control.createObject("downloader"); downloader.addEventListener("downloadProgressChanged","handleDLProgress"); downloader.addEventListener("completed","handleDLComplete"); downloader.open ("GET","movie.wmv"); downloader.send(); }
Теперь можно применить эти обработчики событий. В данном примере событие downloadProgressChanged связано с функцией JavaScript handleDLProgress, и событие completed - с функцией JavaScript handleDLComplete. Эти функции представлены в данном фрагменте кода:
function handleDLProgress(sender, args) { var ctrl = sender.getHost(); var t1 = ctrl.content.findName("txt1"); var v = sender.downloadProgress * 100; t1.Text = v + "%"; } function handleDLComplete(sender, args) { alert("Download complete"); }