Одной из нововведений 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 на рис 21.1
(рис 21.1) Пример использования RichTextAreaВ Silverlight 4 был добавлен простой API для работы с буфером обмена. Он работает на всех платформах, поддерживаемых Silverlight.
Пример кода:
Clipboard.SetText("Некоторый текст в буфере обмена");
Этот код показывает возможность записи некоторого текста в буфер обмена операционной системы из приложения Silverlight.
Метод GetText() возвращает текст, содержащийся в буфере, а ContainsText() определяет, хранится ли в настоящий момент в буфере текст.
В 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;
}
Требуются расширенные права (доверенное приложение).
В приложении нужно сделать взаимодействие с переферийным устройством, которое предоставляет только COM-интерфейс? Или нужно работать с приложениями Office? Используя ComAutomationFactory API в приложении Silverlight 4, можно создавать и взаимодействовать с COM-объектами.
Пример кода (взаимодействие с Excel):
// создание экземпляра Excel
dynamic excel = ComAutomationFactory.CreateObject("Excel.Application");
excel.Visible = true; // включение его видимости для пользователя
// добавление книги
dynamic workbook = excel.workbooks;
workbook.Add();
dynamic sheet = excel.ActiveSheet; // получение активного листа
Требуются расширенные права (доверенное приложение).
В Silverlight 4 появилась возможность показа всплывающих уведомлений рядом с треем.
Используя NotificationWindow в Silverlight, вы получите простой или настраиваемый механизм уведомлений для вашего приложения.
Пример кода:
private void CustomNotificationButton_Click(object sender, RoutedEventArgs e)
{
// создание окна уведомления
NotificationWindow notify = new NotificationWindow();
notify.Height = 74;
notify.Width = 329;
// создание содержимого этого окна
CustomNotification custom = new CustomNotification();
custom.Header = "Sample Header";
custom.Text = "Hey this is a better looking notification!";
custom.Width = notify.Width;
custom.Height = notify.Height;
// установка этого содержимого
notify.Content = custom;
// показ уведомления
notify.Show(4000);
}
Уведомления могут быть использованы только в приложениях вне браузера.
В Silverlight 4 есть возможность передавать NetworkCredential информацию, используя стек ClientHttp, который был представлен в Silverlight 3.Чтобы передать логин/пароль сервису, используется следующий код:
//
NetworkCredential passing is available in ClientHttp networking stack
WebRequest.RegisterPrefix
("http://", System.Net.Browser.WebRequestCreator.ClientHttp);
WebClient myService = new WebClient();
myService.Credentials = new NetworkCredential
("someusername", "somepassword");
myService.UseDefaultCredentials = false;
// Иначе будут использованы значения по-умолчанию
myService.DownloadStringCompleted +=
new DownloadStringCompletedEventHandler(OnResultCompleted);
myService.DownloadStringAsync
(new Uri(http://somewebsite.com/authenticatedservice));
Если Silverlight 4 приложение работает в режиме повышенных привелегий (доверенное приложение), то для работы с веб-сервисами из другого домена вам больше не требуется использовать файлы "clientaccesspolicy.xml" или "crossdomain.xml".
Если ваше приложение Silverlight работает в полном экране ( IsFullScreen="true" ), вам был доступен лишь ограниченный ввод с клавиатуры. В доверенных приложениях на Silverlight 4 в режиме полного экрана полностью поддерживается ввод с клавиатуры для элементов типа TextBox и др. Требуются расширенные права (доверенное приложение).
Элемент TextBlock имеет новое свойство, называемое TextTrimming, которому может быть установлено в значение WordElipse. Когда это сделано, любой текст, непомещающийся в ширину элемента, будет обрезан, а вместо его непоказанной части будет многоточие.
Пример кода:
<TextBlock HorizontalAlignment="
Left" VerticalAlignment="Top"
Text="The quick brown fox jumped over the tall white fence"
TextTrimming="WordEllipsis" Width="120" />
Новые возможности
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.