Из блога Майка Сноу. Новые возможности Silverlight 3 бета 1.
Думаю, вы уже слышали о том, что вышла версия бета 1 Silverlight 3. Если вы еще не установили ее, то можете сделать это отсюда: https://silverlight.net/getstarted/silverlight3/default.aspx.
Этот релиз содержит массу новых великолепных возможностей. Если вы занимаетесь разработкой игр, то будете им рады.
ImageOpened.
В версии Silverlight 2 было трудно определить момент, когда изображение полностью загружено. Это событие чаще всего использовалось, чтобы получить реальные размеры картинки. А возникала эта проблема из-за того, что DownloadProgress указывал на 100% до того, как изображение было полностью декодировано. Чтобы ее решить, было добавлено новое событие ImageOpened. Пример:
Сжатие XAP.
Была проделана большая работа по значительному уменьшению размеров XAP-файлов. Теперь их размер соизмерим (или лучше), как при сжатии средствами Windows. Игры часто содержат массу ресурсов, поэтому уменьшение размеров XAP-файлов ускорит загрузку ваших игр пользователями.
Perspective 3D.
Преобразования "Perspective 3D" теперь могут быть применены в элементах управления Silverlight при помощи свойства PlaneProjection. Это даст вам возможность вращать двумерные объекты в трехмерном пространстве.
Пример ниже демонстрирует, как это делать:
Pixel Shaders.
Шейдеры позволяют применять различные эффекты к изображениям. По умолчанию поддерживаются два встроенных эффекта: Drop Shadow (тени) и Blur (размывание). В дополнение к ним, вы можете создавать и использовать собственные эффекты.
Следующие изображения демонстрируют применение пиксельных шейдеров к ним.
Пример кода по применению встроенного шейдера:
Binding.
Теперь вы можете связывать свойства элементов управления друг с другом. Например, свойство Text объекта TextBlock может быть связано со свойством Text объекта TextBox. Или TextBox Text может быть привязан к свойству Value объекта Slider. Пример:
Все, что будет вводиться в TextBox, автоматически отразится в TextBlock.
Bitmap API.
Доступ к Bitmap API осуществляется при помощи класса WritableBitmap. Этот способ использует в качестве параметров ширину, высоту и формат пикселя.
Графические ускорители.
Silverlight теперь использует GPU (Graphics Processing Unit) для целей визуализации, что освобождает центральный процессор для других задач. GPU обычно находится на видео карте. Он является самостоятельным графическим модулем, используемым для различных задач, например, для вычислений с плавающей точкой.
Улучшение производительности текстовой анимации.
Свойство TextRenderingMode теперь может принимать значение RenderForAnimation. При этом выключается оптимизация, которая может негативно влиять на текстовые эффекты, такие, как расслаивание, вращение и др. В итоге анимация становится более плавной. Пример использования этого свойства:
Network Monitoring API.
Теперь появилось API, позволяющее отслеживать состояние подключения к сети. Для проверки доступности сети, вы можете вызвать следующую функцию:
Кроме того, вы можете использовать событие, которое будет вызвано, когда состояние сети изменится:
Эти функции находятся в пространстве имен System.Net.NetworkInformation.
SaveFileDialog.
Наконец-то мы можем сохранять файлы из приложений Silverlight! Использование этого метода вызовет диалог, позволяющий указать путь к файлу. Метод вернет объект Stream, который вы можете использовать для записи. Пример кода:
Не забудьте вызвать Flush и Close, иначе файл не будет создан.
CaretBrush.
При помощи этого свойства, вы можете изменить вид каретки. Проблема возникала при использовании черного цвета фона в текстовом поле. При этом курсор оставался черным и был невидим. Пример использования:
Результат (обратите внимание на белый цвет каретки):
Локальное подключение.
Эта возможность позволяет двум различным приложениям Silverlight обмениваться информацией напрямую, минуя сервер.
Использование этой функциональности достаточно просто. Начните с создания двух независимых приложений Silverlight. К одному добавьте следующий код, ожидающий прихода сообщения:
Вам будет необходимо сослаться на System.Windows.Messaging, чтобы выполнить эти вызовы. Конструктор LocalMessageReceiver принимает любой уникальный идентификатор.
К другому – добавьте код, как показано ниже, который предназначен для отправки сообщения первому приложению:
Навигация.
Навигация теперь поддерживается в Silverlight. Это позволяет вам перехватывать события, генерируемые кнопками браузера "Вперед" и "Назад". Для этого типа приложений был создан новый шаблон "Silverlight Navigation Application".
В сущности, чтобы воспользоваться навигацией, вам нужно поместить вашу главную страницу в <navigation:Frame>. История сохраняется при помощи следующего вызова:
this.Frame.Navigate(new Uri(currentPage, UriKind.Relative));
Затем, при нажатии кнопок браузера "Вперед" и "Назад", этот объект будет перехватывать данные события, и вызывать нужную страницу.