Опубликован: 15.06.2011 | Уровень: для всех | Доступ: платный
Лекция 10:

Новые возможности Silverlight 4

< Лекция 9 || Лекция 10: 12 || Лекция 11 >
Аннотация: Первоисточник

Печать из Silverlight (Printing API)

Одной из нововведений Silverlight 4 - поддержка печати на стороне клиента. В Silverlight 4 появился такой API System.Windows.Printing.PrintDocument.

Пример кода демонстрирующий печать:

private void PrintAll_Click(object sender, RoutedEventArgs e)
{
   // инициализация нового PrintDocument
   PrintDocument docToPrint = new PrintDocument();
   
   // установка названия для отображения в очереди печати
   docToPrint.DocumentName = "Entire Screen Sample";
 
   // подготовка к печати
   docToPrint.StartPrint += (s, args) =>
     {
       ActivityDisplay.IsActive = true;
     };
 
   // установка объекта для печати
   docToPrint.PrintPage += (s, args) =>
     {
       args.PageVisual = this.StackOfStuff;
     };
 
   // завершение подготовки к печати
   docToPrint.EndPrint += (s, args) =>
     {
       ActivityDisplay.IsActive = false;
     };
 
   // зaпуск печати
   docToPrint.Print();
}

Как видно выше, есть возможность добавления пре- и пост- кода для подготовки к печати. PrintPage это поле, в которое разработчик может установить элемент интерфейса, который необходимо напечатать. Это может быть уже существующий элемент визуального дерева или что-то созданное в виртуальной памяти.

Обработка нажатия правой кнопки мыши

Теперь, в дополнение к событиям MouseLeftButtonUp/Dow, появились события MouseRightButtonUp/Down. Это позволяет разработчику настроить выполнение любого кода при нажатии кнопок мыши, будь это команда управления в игре или открытие контекстного меню.

Пример кода:

public partial class MainPage : UserControl
{
   public MainPage()
   {
     InitializeComponent();
 
     // добавление выполнения функций при нажатии правой кнопки мыши
     ChangingRectangle.MouseRightButtonDown += new MouseButtonEventHandler
                (RectangleContextDown);
     ChangingRectangle.MouseRightButtonUp += new MouseButtonEventHandler
                (RectangleContextUp);
   }
 
   void RectangleContextUp(object sender, MouseButtonEventArgs e)
   {
     // создание контекстного меню и его показ
     ColorChangeContextMenu contextMenu = new ColorChangeContextMenu
                 (ChangingRectangle);
     contextMenu.Show(e.GetPosition(LayoutRoot));
   }
 
   void RectangleContextDown(object sender, MouseButtonEventArgs e)
   {
     // по-умолчанию комнекстное меню должно быть скрыто
     e.Handled = true;
   }
}

Этот исходный код представляет собой заготовку для добавления контекстного меню в приложение на Silverlight 4.

Доступ к веб-камере и микрофону

В Silverlight 4 реализован доступ к веб-камере или к микрофону.

С помощью нескольких строк кода разработчик может запросить у пользователя разрешение на доступ к его устройству видео- или аудио- захвата.

Пример кода для запроса разрешения:

Пример кода для захвата изображения:

// запрос разрешения у пользователя и показ изображения
if (CaptureDeviceConfiguration.AllowedDeviceAccess || 
          CaptureDeviceConfiguration.RequestDeviceAccess())
{
   _captureSource.Start();
}
if (_captureSource != null)
{
   _captureSource.Stop(); // остановка устройства захвата
 
   // установка устройств захвата
   _captureSource.VideoCaptureDevice = (VideoCaptureDevice)VideoSources.
         SelectedItem;   _captureSource.AudioCaptureDevice = 
         (AudioCaptureDevice)AudioSources.SelectedItem; 
   // создание кисти
   VideoBrush vidBrush = new VideoBrush();
   vidBrush.SetSource(_captureSource);
   WebcamCapture.Fill = vidBrush; // закраска области этой кистью =)
 
   // запрос разрешения у пользователя и показ изображения
   if (CaptureDeviceConfiguration.AllowedDeviceAccess ||
             CaptureDeviceConfiguration.RequestDeviceAccess())
   {
     _captureSource.Start();
   }
}

Также добавлен простой API для фотографирования с помощью веб-камеры:

private void TakeSnapshot_Click(object sender,
        RoutedEventArgs e)
{
   if (_captureSource != null)
   {
     // захват текучего кадра и добавление его в коллекцию
     _captureSource.AsyncCaptureImage((snapImage) =>
       {
         _images.Add(snapImage);
       });
   }
}

Поддержка колеса мыши

В предыдущих версиях Silverlight для обработки событий колеса мыши нужно было использовать какие-либо вспомогательные классы, например от DeepZoom. В четвертой версии был добавлен соответствующий API.

Пример кода:

// привязка события
myRectangle.MouseWheel += new MouseWheelEventHandler(RectangleZoom);
 
void RectangleZoom(object sender, MouseWheelEventArgs e)
{
}

Элемент RichTextArea

Одним из запрашиваемых пользователями нововведением был элемент интерфейса с редактируемым богатым текстом (поддержка жирного, курсива, разных размеров, цветов и т.д.). Используя RichTextArea, теперь можно получить такой элемент. Пример использования RichTextArea на рис 21.1

Пример использования RichTextArea

Рис. 21.1. Пример использования RichTextArea

API буфера обмена

В Silverlight 4 был добавлен простой API для работы с буфером обмена. Он работает на всех платформах, поддерживаемых Silverlight.

Пример кода:

Clipboard.SetText("Некоторый текст в буфере обмена");

Этот код показывает возможность записи некоторого текста в буфер обмена операционной системы из приложения Silverlight.

Метод GetText() возвращает текст, содержащийся в буфере, а ContainsText() определяет, хранится ли в настоящий момент в буфере текст.

Отображение HTML-документа с помощью элемента WebBrowser

В Silverlight 4 стало возможным отображение HTML-документов в интерфейсе приложения. Для этого используется элемент WebBrowser, HTML-код в который можно загружать как из строковой переменной, так и из удаленной странице по URL.

Пример кода (XAML):

<WebBrowser x:Name="MyBrowserControl" Width="800" 
     Height="600" />

Пример кода (C#):

MyBrowserControl.NavigateToString("<div style='color:red;
    width:100;height:100'><b>Example HTML</b></div>");

Доступ к локальным файлам на клиентском компьютере

Для чтения/записи данных с компьютера пользователя обычно используются механизмы OpenFileDialog (для чтения) и SaveFileDialog (для записи). В Silverlight 4 появился прямой доступ к локальным файлам пользователя ( "Мои документы", "Мое видео", "Моя музыка" и т.д).

Чтобы получить путь к файлам, нужно использовать пространство имен Environment.

Пример кода:

private void EnumerateFiles(object sender, RoutedEventArgs e)
{
   // создание списка для имен файлов
   List<string> videosInFolder = new List<string>();
 
   // используя Directory API,
   // используя SpecialFolder API, получаем путь к папке "Мое видео"
   var videos = Directory.EnumerateFiles(Environment.GetFolderPath
           (Environment.SpecialFolder.MyVideos));
   
   // перечисляем файлы
   foreach (var item in videos)
   {
     videosInFolder.Add(item);
   }
 
   // привязываем данные
   VideoFileListing.ItemsSource = videosInFolder;
}

Требуются расширенные права (доверенное приложение).

< Лекция 9 || Лекция 10: 12 || Лекция 11 >
Андрей Ляхов
Андрей Ляхов
Казахстан, Талгар
Игорь Сикорский
Игорь Сикорский
Украина, Сумы