SlideShare a Scribd company logo
1 of 45
Silverlight 4, есть ли жизнь на десктопе? Евгений Жарков MCTS: Silverlight 4, Development
Silverlight Windows Phone 7 ПК Браузер Вне браузера
Out of browser (OOB) Управление окном Настройка внешнего вида окна Размещения HTML внутри приложения Окна уведомлений Digital Rights Management (DRM) Расширенные права Доступ к файловой системе COM Интегрированная возможность обновления
Активация OOB
КонфигурацияOOB
Инсталляция Довели до ума
Установка доверенных приложений
Подпись XAP
Тихая установка XAP Инсталляция /install:"xapFile" – where xapFile is the file name/file path to the .xap file., E.g. /install:"c:empample.xap" /origin:"xapURI" – where xapURI is the URI where the .xap file would've come from if not installed at the commandline e.g. /origin:"http://example.com/sample.xap" .  This URI will be used as the site of origin for security purposes. For example, for sandboxed applications, Silverlight networking requires a policy file check when making network requests to domains other than the site of origin.  The origin also serves as a unique ID for the application.  The xapURI must be an absolute URI not a relative URI, and must start with http:, https:, or file:. /overwrite -- (optional) Overwrites any previously installed .xap with that xapURI. Деинсталляция /uninstall  – Uninstalls the application specified in /origin. This is the same /origin value that was used to install the app originally. /origin:"xapURI" – same as /origin for the install case
Тихая установка XAP Установка sllauncher.exe  /install:"{LocalPathToXapFile}ourfile.xap"  /origin:"{urltoxapfile}/Yourfile.xap"  /shortcut:desktop+startmenu Автозапуск "%ProgramFiles%icrosoft Silverlightllauncher.exe"  /emulate:"Yourfile.xap" 	 /origin:"http://blabla.com/Yourfile.xap" Деинсталляция "%ProgramFiles%icrosoft Silverlightllauncher.exe"  /uninstall  /origin:"http://blabla.com/Yourfile.xap"
Тихая установка Silverlight /q- quiet install or upgrade. This installs or upgrades Silverlight without seeing the GUI. When Silverlight is installed quietly, by default privacy related features such as DRM protected media playback and the Silverlight auto-update feature will be configured to prompt the user for permission on 1st use of the respective features. The Silverlight auto-update feature requires administrative rights so non-admin users will not be prompted. /doNotRequireDRMPrompt - turns off the 1st use prompt allowing content protected by Digital Rights Management (DRM) to play without requiring any end-user intervention. When Silverlight is installed quietly, DRM Playback is set to prompt on 1st use by default. /ignorewarnings - non-fatal warnings will not be reflected in the quiet installer return code but will instead return zero indicating success. /noupdate - disables the Silverlight internal auto-updater. /qu - quiet uninstall. This uninstalls Silverlight without seeing the GUI.
Тихая установка Silverlight Результирующая строка Silverlight.exe /q /doNotRequireDRMPrompt
NSIS Script Example Name “Test Out of Browser Installer" OutFile“TextOOBInstaller.exe" InstallDir "$PROGRAMFILESestOOB" XPStyle on Section SetOutPath "$INSTDIR" SetOverwriteifnewer     File "Silverlight.exe" ExecWait "$INSTDIRilverlight.exe /q /doNotRequireDRMPrompt"     File “TestOOB.xap" ExecWait '"$PROGRAMFILESicrosoft Silverlightllauncher.exe" 	/install:"$INSTDIRestOOB.xap"   /origin:"http://blabla.com/TestOOB.xap"  	/shortcut:desktop+startmenu' SectionEnd
Batch Script :: Is this a 64-bit machine? @echo off if exist "%ProgramFiles(x86)%" ( :: We're on 64-bit   set sllauncherlocation="%ProgramFiles(x86)%icrosoft Silverlightllauncher.exe" ) else ( ::We're on 32-bit   set sllauncherlocation="%ProgramFiles%icrosoft Silverlightllauncher.exe" ) :: run SL %sllauncherlocation% /overwrite /emulate:“TestOOB.xap" /origin:"http://blabla/TestOOB.xap"
Мои документы 我的文件 My Documents EigeneDateien Mes documents Documents Мои документы Τα έγγραφά μου
Batch Script User Folder Извлекаем правильный адрес директории “Мои документы” из реестра FOR /F "tokens=3 delims= " %%G IN ('REG QUERY "HKCUoftwareicrosoftindowsurrentVersionxplorerhell Folders" /v "Personal"') DO (SET docsdir=%%G)
Многоязычный интерфейс Добавление поддерживаемых культур в файл проекта <?xmlversion="1.0"encoding="utf-8"?> <ProjectToolsVersion="4.0"DefaultTargets="Build"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">   <PropertyGroup>     <ConfigurationCondition=" '$(Configuration)' == '' ">Debug</Configuration>     <PlatformCondition=" '$(Platform)' == '' ">AnyCPU</Platform> <!– настройки --> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>     <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>     <SilverlightApplication>true</SilverlightApplication>     <SupportedCultures>en-US,ru-RU,uk-UA</SupportedCultures>     <XapOutputs>true</XapOutputs>
Многоязычный интерфейс Добавляем ресурсы с локализованным текстом
Многоязычный интерфейс Установить модификатор доступа в Public
Многоязычный интерфейс Регистрация ресурса <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:MyApplication" x:Class=“MyApplication.App">   <Application.Resources> <local:LocalizationResource x:Key="Localization" />   </Application.Resources> </Application>
Многоязычный интерфейс Регистрация ресурса     publicclassLocalizationResource : INotifyPropertyChanged     { privatestaticLocalization.Strings resource = newLocalization.Strings(); publicLocalization.Strings Strings         { get { return resource; } set { OnPropertyChanged("Strings"); }         }         #regionINotifyPropertyChanged Members publiceventPropertyChangedEventHandlerPropertyChanged; privatevoidOnPropertyChanged(stringpropertyName)         { if (PropertyChanged != null)             { PropertyChanged(this, newPropertyChangedEventArgs(propertyName));             }         }         #endregion }
Многоязычный интерфейс Переключение языка UI Thread.CurrentThread.CurrentUICulture = newCultureInfo("uk-UA");             ((LocalizationResource)Application.Current.Resources["Localization"]).Strings = newMyApplication.Localization.Strings();
COM Подключаем пространство имен usingSystem.Runtime.InteropServices.Automation; Создаем файлы в любом месте на ПК using (dynamicfsoCom = AutomationFactory.CreateObject("Scripting.FileSystemObject")) { dynamic file = fsoCom.CreateTextFile(@"c:est.txt", true); file.WriteLine("Bloody Hell!"); file.WriteLine("Silverlight is writing to C:"); file.Close(); }
COM Пиним приложение на панель задач using (dynamicShellApplication = ComAutomationFactory.CreateObject("Shell.Application")) { dynamiccommonPrograms = ShellApplication.NameSpace(23); stringallUsersPath = commonPrograms.Self.Path; dynamic directory = ShellApplication.NameSpace(allUsersPath + @"ccessories"); dynamic link = directory.ParseName("Calculator.lnk"); dynamic verbs = link.Verbs(); for (int i = 0; i < verbs.Count(); i++)     { dynamic verb = verbs.Item(i); if (verb.Name.Replace(@"&", string.Empty).ToLower() == "pin to taskbar")         { verb.DoIt();         }     } }
COM Добавляем OOB-приложение в автозагрузку using (dynamicShellApplication = ComAutomationFactory.CreateObject("Shell.Application")) { dynamiccommonPrograms = ShellApplication.NameSpace(11); stringallUsersPath = commonPrograms.Self.Path; dynamic directory = ShellApplication.NameSpace(allUsersPath + @"rograms"); dynamic link = directory.ParseName(Deployment.Current.OutOfBrowserSettings.ShortName + ".lnk"); stringOOBLink = link.Path; using (dynamicWShell = ComAutomationFactory.CreateObject("WScript.Shell"))     { WShell.RegWrite(@"HKLMoftwareicrosoftindowsurrentVersionunquot;                                     + Deployment.Current.OutOfBrowserSettings.ShortName, OOBLink); MessageBox.Show("Please restart your machine and this application will load on startup.");     } }
COM Работа с ODBC using (dynamicIDbConnection = ComAutomationFactory.CreateObject("ADODB.Connection")) using (dynamicIDbCommand = ComAutomationFactory.CreateObject("ADODB.Command")) { IDbConnection.ConnectionString = "driver={SQL Server};"+                                  "server=.;uid=sa;pwd=password;database=Northwind"; IDbConnection.Open(); IDbCommand.ActiveConnection = IDbConnection; IDbCommand.CommandText = @"INSERT INTO [Northwind].[dbo].[Region]                     ([RegionID], [RegionDescription]) VALUES (10, 'BLa')"; IDbCommand.Execute(); }
Тихая установка MSSQL Express sqlexpr32.exe -q /norebootchk /qnREBOOT=ReallySuppressINSTANCENAME="name" ADDLOCAL=ALLSECURITYMODE=SQL 	SAPWD="password" SQLAUTOSTART=1 DISABLENETWORKPROTOCOLS=0 Compact Edition msiexec /quit /i SSCERuntime-ENU-x86.msi
Silverlight COM Toolkit http://silverlightcom.codeplex.com/
Silverlight COM Toolkit Copy ComToolkit.IO.File.Copy(@"c:nyDirnyFile.ext", @"c:nyDirnyFile2.ext", true); Exists bool exist = ComToolkit.IO.File.Exists(@"c:nyDirnyFile.ext"); WriteAllBytes string[] contents = //some lines of text...ComToolkit.IO.File.WriteAllLines(@"c:nyDirnyFile.ext", bytes); Open AdoFileStream stream = ComToolkit.IO.File.Open(@"c:nyDirnyFile.ext", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite); http://silverlightcom.codeplex.com/
Silverlight COM Toolkit ComToolkit.Data stringconnectionString = @"Provider=SQLOLEDB;DataSource=servernameqlexpress;InitialCatalog=databasename;User ID=username; Password=password"; using (var connection = newComToolkit.Data.AdoConnection(connectionString)) {  connection.Open();  varcommand = connection.CreateCommand();  command.CommandText= "SELECT MyColumn FROM MyTable";  varreader = command.ExecuteReader();  while(reader.Read()) {  objectbyindex = reader[0];  objectbystring = reader["MyColumn"];  //для работы с динамическими свойства reader должен быть объявлен как dynamic //object bydynamic = reader.MyColumn; } } http://silverlightcom.codeplex.com/
Silverlight COM Toolkit Асинхронный ComToolkit.Data privateComToolkit.Data.AdoConnection connection;  privatevoidExecuteReaderAsyncSample() { connection = newComToolkit.Data.AdoConnection(connectionString);  connection.Open();  varcommand = connection.CreateCommand();  command.CommandText= "SELECT MyColumn FROM MyTable"; command.ExecuteReaderCompleted+= new EventHandler<ComToolkit.Data.ExecuteReaderCompletedEventArgs>(command_ExecuteReaderCompleted);  command.ExecuteReaderAsync(); }  voidcommand_ExecuteReaderCompleted(object sender, ComToolkit.Data.ExecuteReaderCompletedEventArgs e) {  //TODO: обрабатываем результат } http://silverlightcom.codeplex.com/
Работа с документами
XML Paper Specification(XPS) Позитивные факторы В основе лежит ZIP, XML, XAML. Разработан Microsoft и Ecma International, 2006 год Возможность относительно легкой конвертации в XAML Родная поддержка в Windows Vista/7 Негативные факторы Windows XP SP2 требует наличие .NET Framework 3 иXPS Document Viewer
PDF Позитивные факторы Бесплатные компоненты для обработки PDF-документа Возможность разместить документ в WebBrowserпри наличии Adobe Acrobat плагина Негативные факторы Платные компоненты для обработки и отображения в Silverlight-приложении
HTML Позитивные факторы Возможно разместить внутри элемента управления WebBrowser Негативные факторы Невозможно открывать локальные файлы внутри WebBrowser Невозможно задать заголовочную информацию в WebBrowser Невозможно открыть MHT-файлы Следует собирать все ресурсы в единый HTML-файл, включая изображения, используя Data URI, который имеет ограничение в 32КБ
Microsoft Office (Word, Excel, PowerPoint) Позитивные факторы Работа с документами через COM Негативные факторы Отсутствует родная поддержкав Silverlight
Microsoft Office (Word, Excel, PowerPoint) Пример обработки Word документа using(dynamic word = AutomationFactory.CreateObject("Word.Application")) { intwdFormatWebArchive = 9; // MHT fileformat intwdDoNotSaveChanges = 0; // WdSaveOptions do not save value using(dynamic document = word.Documents.Open(tempDoc))     { document.SaveAs("C:.doc", refwdFormatWebArchive);     } word.Quit(refwdDoNotSaveChanges); }
События Office  Пример обработки Word документа dynamic word = AutomationFactory.CreateObject("Word.Application"); word.Visible = true; AutomationEventsearchEvent = AutomationFactory.GetEvent(word, "Quit"); searchEvent.EventRaised += (s, a) => { MessageBox.Show("Quit"); }; dynamic document = word.Documents.Open("C:est.doc");
Потоки и BackgroundWorker varbw = newBackgroundWorker(); bw.WorkerReportsProgress = true; bw.DoWork+= (s, a) => { varworker = sender asBackgroundWorker; worker.ReportProgress(0, "Сейчас начнем"); MessageBox.Show("Работаем"); worker.ReportProgress(100, «Закончили"); }; bw.ProgressChanged+= (s, a) =>{ MessageBox.Show("Current state" + a.ProgressPercentage.ToString()); // сложные объекты могут передаваться в e.UserState     }; bw.RunWorkerCompleted+= (s, a) => { MessageBox.Show("Done"); }; bw.RunWorkerAsync(newDictionary<string, object> {          { "file", "test.doc"},         { "region", "Ukraine"}     });
Navigation Framework Подключение пространства имен в XAML <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" xmlns:uriMapper="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation">
Navigation Framework Добавление Frame <navigation:Frame x:Name="ContentFrame" Source="/Action"> <navigation:Frame.UriMapper> <uriMapper:UriMapper> <uriMapper:UriMapping Uri=""MappedUri="/Pages/Action.xaml"/> <uriMapper:UriMapping Uri="/{pageName}"MappedUri="/Pages/{pageName}.xaml"/> </uriMapper:UriMapper> </navigation:Frame.UriMapper> </navigation:Frame> Переход на другую страницу NavigationService.Navigate(newUri("/INeedThisPage", UriKind.Relative));
Управление окном Ограничение размера окна // App.xaml privatevoidApplication_Startup(object sender, StartupEventArgs e) { this.RootVisual= newMainPage(); App.Current.Host.Content.Resized += (s, a) =>          { App.Current.MainWindow.Height = 650; App.Current.MainWindow.Width = 1000;         }; } Развернуть окно App.Current.MainWindow.WindowState= WindowState.Maximized;
Notification Window var block = newTextBlock(); block.Text = "Wassup!"; varnw = newNotificationWindow(); nw.Height = 50; nw.Width = 300; nw.Content = block; nw.Show(3000);
Поздравляю, вы пережили этот доклад Евгений Жарков eu.zharkov@gmail.com @2j2e Слушай подкаст 2Гига

More Related Content

What's hot

ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...Andrey Taritsyn
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Микрофреймворки PHP
Микрофреймворки PHPМикрофреймворки PHP
Микрофреймворки PHPEkaterina Giganova
 
Пользователь точно оценит! Повышение производительности мобильных приложений ...
Пользователь точно оценит! Повышение производительности мобильных приложений ...Пользователь точно оценит! Повышение производительности мобильных приложений ...
Пользователь точно оценит! Повышение производительности мобильных приложений ...Ontico
 
Let’s talk about Atlas
Let’s talk about AtlasLet’s talk about Atlas
Let’s talk about AtlasArtem Sokovets
 
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"Fwdays
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flashguestb0af15
 
Positive Hack Days. Гольцев. Мастер - класс: Уязвимости Web – сложные случаи.
Positive Hack Days. Гольцев.  Мастер - класс: Уязвимости Web – сложные случаи.Positive Hack Days. Гольцев.  Мастер - класс: Уязвимости Web – сложные случаи.
Positive Hack Days. Гольцев. Мастер - класс: Уязвимости Web – сложные случаи.Positive Hack Days
 
Cоздание приложений со знанием Perl
Cоздание приложений со знанием PerlCоздание приложений со знанием Perl
Cоздание приложений со знанием PerlAnatoly Sharifulin
 
Svyatoslav Login "How to test authentication and authorization for security"
Svyatoslav Login "How to test authentication and authorization for security"Svyatoslav Login "How to test authentication and authorization for security"
Svyatoslav Login "How to test authentication and authorization for security"Fwdays
 
Vipolnenie komand na servere
Vipolnenie komand na servereVipolnenie komand na servere
Vipolnenie komand na servereygoltsev
 
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverXPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverИлья Кожухов
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIPavel Asanov
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Oleksii Okhrymenko
 
Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеровMedia Gorod
 
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ontico
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформыSQALab
 

What's hot (20)

ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Микрофреймворки PHP
Микрофреймворки PHPМикрофреймворки PHP
Микрофреймворки PHP
 
Пользователь точно оценит! Повышение производительности мобильных приложений ...
Пользователь точно оценит! Повышение производительности мобильных приложений ...Пользователь точно оценит! Повышение производительности мобильных приложений ...
Пользователь точно оценит! Повышение производительности мобильных приложений ...
 
Let’s talk about Atlas
Let’s talk about AtlasLet’s talk about Atlas
Let’s talk about Atlas
 
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
 
Positive Hack Days. Гольцев. Мастер - класс: Уязвимости Web – сложные случаи.
Positive Hack Days. Гольцев.  Мастер - класс: Уязвимости Web – сложные случаи.Positive Hack Days. Гольцев.  Мастер - класс: Уязвимости Web – сложные случаи.
Positive Hack Days. Гольцев. Мастер - класс: Уязвимости Web – сложные случаи.
 
Cоздание приложений со знанием Perl
Cоздание приложений со знанием PerlCоздание приложений со знанием Perl
Cоздание приложений со знанием Perl
 
Svyatoslav Login "How to test authentication and authorization for security"
Svyatoslav Login "How to test authentication and authorization for security"Svyatoslav Login "How to test authentication and authorization for security"
Svyatoslav Login "How to test authentication and authorization for security"
 
Vipolnenie komand na servere
Vipolnenie komand na servereVipolnenie komand na servere
Vipolnenie komand na servere
 
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverXPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriver
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеров
 
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформы
 

Similar to Silverlight 4, есть ли жизнь на десктопе?

Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеAlex Tumanoff
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Александр Егурцов
 
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demomegakott
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?Oleksandr Torosh
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Ontico
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkGeorgy Turevich
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
WAF наше все?!
WAF наше все?!WAF наше все?!
WAF наше все?!Dmitry Evteev
 
Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflowit-people
 
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...IT Event
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.Дмитрий Бумов
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 
Adobe Flex константин ковалев
Adobe Flex   константин ковалевAdobe Flex   константин ковалев
Adobe Flex константин ковалевMedia Gorod
 

Similar to Silverlight 4, есть ли жизнь на десктопе? (20)

Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопе
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demo
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend Framework
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
Browser Persistence Bynet
Browser Persistence BynetBrowser Persistence Bynet
Browser Persistence Bynet
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
WAF наше все?!
WAF наше все?!WAF наше все?!
WAF наше все?!
 
Ci
CiCi
Ci
 
Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflow
 
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
Drupal Vs Other
Drupal Vs OtherDrupal Vs Other
Drupal Vs Other
 
Adobe Flex константин ковалев
Adobe Flex   константин ковалевAdobe Flex   константин ковалев
Adobe Flex константин ковалев
 

More from Eugene Zharkov

Monorepo: React + React Native. React Alicante
Monorepo:  React + React Native. React Alicante Monorepo:  React + React Native. React Alicante
Monorepo: React + React Native. React Alicante Eugene Zharkov
 
Monorepo: React Web & React Native
Monorepo: React Web & React NativeMonorepo: React Web & React Native
Monorepo: React Web & React NativeEugene Zharkov
 
Create React Native App vs Expo vs Manually
Create React Native App vs Expo vs ManuallyCreate React Native App vs Expo vs Manually
Create React Native App vs Expo vs ManuallyEugene Zharkov
 
Build automation with Fastlane
Build automation with FastlaneBuild automation with Fastlane
Build automation with FastlaneEugene Zharkov
 
React Native Animation
React Native AnimationReact Native Animation
React Native AnimationEugene Zharkov
 
React Native: Hurdle Race
React Native: Hurdle RaceReact Native: Hurdle Race
React Native: Hurdle RaceEugene Zharkov
 
Burn your grass with react native
Burn your grass with react nativeBurn your grass with react native
Burn your grass with react nativeEugene Zharkov
 
Фронтенд сказки
Фронтенд сказкиФронтенд сказки
Фронтенд сказкиEugene Zharkov
 
How to be a good frontend developer
How to be a good frontend developerHow to be a good frontend developer
How to be a good frontend developerEugene Zharkov
 
Cycle.js: Functional and Reactive
Cycle.js: Functional and ReactiveCycle.js: Functional and Reactive
Cycle.js: Functional and ReactiveEugene Zharkov
 
Что там в summary
Что там в summaryЧто там в summary
Что там в summaryEugene Zharkov
 
Switch to React.js from AngularJS developer
Switch to React.js from AngularJS developerSwitch to React.js from AngularJS developer
Switch to React.js from AngularJS developerEugene Zharkov
 
Mobile applications in a new way with React Native
Mobile applications in a new way with React NativeMobile applications in a new way with React Native
Mobile applications in a new way with React NativeEugene Zharkov
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переигралEugene Zharkov
 
Angular 2.0: Brighter future?
Angular 2.0: Brighter future?Angular 2.0: Brighter future?
Angular 2.0: Brighter future?Eugene Zharkov
 
Как объяснить на платьях процесс разработки?
Как объяснить на платьях процесс разработки?Как объяснить на платьях процесс разработки?
Как объяснить на платьях процесс разработки?Eugene Zharkov
 
Angular.JS: Do it right
Angular.JS: Do it rightAngular.JS: Do it right
Angular.JS: Do it rightEugene Zharkov
 

More from Eugene Zharkov (20)

Monorepo: React + React Native. React Alicante
Monorepo:  React + React Native. React Alicante Monorepo:  React + React Native. React Alicante
Monorepo: React + React Native. React Alicante
 
Monorepo: React Web & React Native
Monorepo: React Web & React NativeMonorepo: React Web & React Native
Monorepo: React Web & React Native
 
Create React Native App vs Expo vs Manually
Create React Native App vs Expo vs ManuallyCreate React Native App vs Expo vs Manually
Create React Native App vs Expo vs Manually
 
Build automation with Fastlane
Build automation with FastlaneBuild automation with Fastlane
Build automation with Fastlane
 
GraphQL and/or REST
GraphQL and/or RESTGraphQL and/or REST
GraphQL and/or REST
 
React Native Animation
React Native AnimationReact Native Animation
React Native Animation
 
React Native: Hurdle Race
React Native: Hurdle RaceReact Native: Hurdle Race
React Native: Hurdle Race
 
Burn your grass with react native
Burn your grass with react nativeBurn your grass with react native
Burn your grass with react native
 
Фронтенд сказки
Фронтенд сказкиФронтенд сказки
Фронтенд сказки
 
How to be a good frontend developer
How to be a good frontend developerHow to be a good frontend developer
How to be a good frontend developer
 
Cycle.js: Functional and Reactive
Cycle.js: Functional and ReactiveCycle.js: Functional and Reactive
Cycle.js: Functional and Reactive
 
Что там в summary
Что там в summaryЧто там в summary
Что там в summary
 
Elm: give it a try
Elm: give it a tryElm: give it a try
Elm: give it a try
 
Switch to React.js from AngularJS developer
Switch to React.js from AngularJS developerSwitch to React.js from AngularJS developer
Switch to React.js from AngularJS developer
 
AngularJS: Good parts
AngularJS: Good partsAngularJS: Good parts
AngularJS: Good parts
 
Mobile applications in a new way with React Native
Mobile applications in a new way with React NativeMobile applications in a new way with React Native
Mobile applications in a new way with React Native
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переиграл
 
Angular 2.0: Brighter future?
Angular 2.0: Brighter future?Angular 2.0: Brighter future?
Angular 2.0: Brighter future?
 
Как объяснить на платьях процесс разработки?
Как объяснить на платьях процесс разработки?Как объяснить на платьях процесс разработки?
Как объяснить на платьях процесс разработки?
 
Angular.JS: Do it right
Angular.JS: Do it rightAngular.JS: Do it right
Angular.JS: Do it right
 

Silverlight 4, есть ли жизнь на десктопе?

  • 1. Silverlight 4, есть ли жизнь на десктопе? Евгений Жарков MCTS: Silverlight 4, Development
  • 2. Silverlight Windows Phone 7 ПК Браузер Вне браузера
  • 3. Out of browser (OOB) Управление окном Настройка внешнего вида окна Размещения HTML внутри приложения Окна уведомлений Digital Rights Management (DRM) Расширенные права Доступ к файловой системе COM Интегрированная возможность обновления
  • 7.
  • 10. Тихая установка XAP Инсталляция /install:"xapFile" – where xapFile is the file name/file path to the .xap file., E.g. /install:"c:empample.xap" /origin:"xapURI" – where xapURI is the URI where the .xap file would've come from if not installed at the commandline e.g. /origin:"http://example.com/sample.xap" .  This URI will be used as the site of origin for security purposes. For example, for sandboxed applications, Silverlight networking requires a policy file check when making network requests to domains other than the site of origin.  The origin also serves as a unique ID for the application.  The xapURI must be an absolute URI not a relative URI, and must start with http:, https:, or file:. /overwrite -- (optional) Overwrites any previously installed .xap with that xapURI. Деинсталляция /uninstall  – Uninstalls the application specified in /origin. This is the same /origin value that was used to install the app originally. /origin:"xapURI" – same as /origin for the install case
  • 11. Тихая установка XAP Установка sllauncher.exe /install:"{LocalPathToXapFile}ourfile.xap" /origin:"{urltoxapfile}/Yourfile.xap" /shortcut:desktop+startmenu Автозапуск "%ProgramFiles%icrosoft Silverlightllauncher.exe" /emulate:"Yourfile.xap" /origin:"http://blabla.com/Yourfile.xap" Деинсталляция "%ProgramFiles%icrosoft Silverlightllauncher.exe" /uninstall /origin:"http://blabla.com/Yourfile.xap"
  • 12. Тихая установка Silverlight /q- quiet install or upgrade. This installs or upgrades Silverlight without seeing the GUI. When Silverlight is installed quietly, by default privacy related features such as DRM protected media playback and the Silverlight auto-update feature will be configured to prompt the user for permission on 1st use of the respective features. The Silverlight auto-update feature requires administrative rights so non-admin users will not be prompted. /doNotRequireDRMPrompt - turns off the 1st use prompt allowing content protected by Digital Rights Management (DRM) to play without requiring any end-user intervention. When Silverlight is installed quietly, DRM Playback is set to prompt on 1st use by default. /ignorewarnings - non-fatal warnings will not be reflected in the quiet installer return code but will instead return zero indicating success. /noupdate - disables the Silverlight internal auto-updater. /qu - quiet uninstall. This uninstalls Silverlight without seeing the GUI.
  • 13. Тихая установка Silverlight Результирующая строка Silverlight.exe /q /doNotRequireDRMPrompt
  • 14. NSIS Script Example Name “Test Out of Browser Installer" OutFile“TextOOBInstaller.exe" InstallDir "$PROGRAMFILESestOOB" XPStyle on Section SetOutPath "$INSTDIR" SetOverwriteifnewer File "Silverlight.exe" ExecWait "$INSTDIRilverlight.exe /q /doNotRequireDRMPrompt" File “TestOOB.xap" ExecWait '"$PROGRAMFILESicrosoft Silverlightllauncher.exe" /install:"$INSTDIRestOOB.xap" /origin:"http://blabla.com/TestOOB.xap" /shortcut:desktop+startmenu' SectionEnd
  • 15. Batch Script :: Is this a 64-bit machine? @echo off if exist "%ProgramFiles(x86)%" ( :: We're on 64-bit set sllauncherlocation="%ProgramFiles(x86)%icrosoft Silverlightllauncher.exe" ) else ( ::We're on 32-bit set sllauncherlocation="%ProgramFiles%icrosoft Silverlightllauncher.exe" ) :: run SL %sllauncherlocation% /overwrite /emulate:“TestOOB.xap" /origin:"http://blabla/TestOOB.xap"
  • 16. Мои документы 我的文件 My Documents EigeneDateien Mes documents Documents Мои документы Τα έγγραφά μου
  • 17. Batch Script User Folder Извлекаем правильный адрес директории “Мои документы” из реестра FOR /F "tokens=3 delims= " %%G IN ('REG QUERY "HKCUoftwareicrosoftindowsurrentVersionxplorerhell Folders" /v "Personal"') DO (SET docsdir=%%G)
  • 18. Многоязычный интерфейс Добавление поддерживаемых культур в файл проекта <?xmlversion="1.0"encoding="utf-8"?> <ProjectToolsVersion="4.0"DefaultTargets="Build"xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <ConfigurationCondition=" '$(Configuration)' == '' ">Debug</Configuration> <PlatformCondition=" '$(Platform)' == '' ">AnyCPU</Platform> <!– настройки --> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion> <SilverlightApplication>true</SilverlightApplication> <SupportedCultures>en-US,ru-RU,uk-UA</SupportedCultures> <XapOutputs>true</XapOutputs>
  • 19. Многоязычный интерфейс Добавляем ресурсы с локализованным текстом
  • 20. Многоязычный интерфейс Установить модификатор доступа в Public
  • 21. Многоязычный интерфейс Регистрация ресурса <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:MyApplication" x:Class=“MyApplication.App"> <Application.Resources> <local:LocalizationResource x:Key="Localization" /> </Application.Resources> </Application>
  • 22. Многоязычный интерфейс Регистрация ресурса publicclassLocalizationResource : INotifyPropertyChanged { privatestaticLocalization.Strings resource = newLocalization.Strings(); publicLocalization.Strings Strings { get { return resource; } set { OnPropertyChanged("Strings"); } } #regionINotifyPropertyChanged Members publiceventPropertyChangedEventHandlerPropertyChanged; privatevoidOnPropertyChanged(stringpropertyName) { if (PropertyChanged != null) { PropertyChanged(this, newPropertyChangedEventArgs(propertyName)); } } #endregion }
  • 23. Многоязычный интерфейс Переключение языка UI Thread.CurrentThread.CurrentUICulture = newCultureInfo("uk-UA"); ((LocalizationResource)Application.Current.Resources["Localization"]).Strings = newMyApplication.Localization.Strings();
  • 24. COM Подключаем пространство имен usingSystem.Runtime.InteropServices.Automation; Создаем файлы в любом месте на ПК using (dynamicfsoCom = AutomationFactory.CreateObject("Scripting.FileSystemObject")) { dynamic file = fsoCom.CreateTextFile(@"c:est.txt", true); file.WriteLine("Bloody Hell!"); file.WriteLine("Silverlight is writing to C:"); file.Close(); }
  • 25. COM Пиним приложение на панель задач using (dynamicShellApplication = ComAutomationFactory.CreateObject("Shell.Application")) { dynamiccommonPrograms = ShellApplication.NameSpace(23); stringallUsersPath = commonPrograms.Self.Path; dynamic directory = ShellApplication.NameSpace(allUsersPath + @"ccessories"); dynamic link = directory.ParseName("Calculator.lnk"); dynamic verbs = link.Verbs(); for (int i = 0; i < verbs.Count(); i++) { dynamic verb = verbs.Item(i); if (verb.Name.Replace(@"&", string.Empty).ToLower() == "pin to taskbar") { verb.DoIt(); } } }
  • 26. COM Добавляем OOB-приложение в автозагрузку using (dynamicShellApplication = ComAutomationFactory.CreateObject("Shell.Application")) { dynamiccommonPrograms = ShellApplication.NameSpace(11); stringallUsersPath = commonPrograms.Self.Path; dynamic directory = ShellApplication.NameSpace(allUsersPath + @"rograms"); dynamic link = directory.ParseName(Deployment.Current.OutOfBrowserSettings.ShortName + ".lnk"); stringOOBLink = link.Path; using (dynamicWShell = ComAutomationFactory.CreateObject("WScript.Shell")) { WShell.RegWrite(@"HKLMoftwareicrosoftindowsurrentVersionunquot; + Deployment.Current.OutOfBrowserSettings.ShortName, OOBLink); MessageBox.Show("Please restart your machine and this application will load on startup."); } }
  • 27. COM Работа с ODBC using (dynamicIDbConnection = ComAutomationFactory.CreateObject("ADODB.Connection")) using (dynamicIDbCommand = ComAutomationFactory.CreateObject("ADODB.Command")) { IDbConnection.ConnectionString = "driver={SQL Server};"+ "server=.;uid=sa;pwd=password;database=Northwind"; IDbConnection.Open(); IDbCommand.ActiveConnection = IDbConnection; IDbCommand.CommandText = @"INSERT INTO [Northwind].[dbo].[Region]                    ([RegionID], [RegionDescription]) VALUES (10, 'BLa')"; IDbCommand.Execute(); }
  • 28. Тихая установка MSSQL Express sqlexpr32.exe -q /norebootchk /qnREBOOT=ReallySuppressINSTANCENAME="name" ADDLOCAL=ALLSECURITYMODE=SQL SAPWD="password" SQLAUTOSTART=1 DISABLENETWORKPROTOCOLS=0 Compact Edition msiexec /quit /i SSCERuntime-ENU-x86.msi
  • 29. Silverlight COM Toolkit http://silverlightcom.codeplex.com/
  • 30. Silverlight COM Toolkit Copy ComToolkit.IO.File.Copy(@"c:nyDirnyFile.ext", @"c:nyDirnyFile2.ext", true); Exists bool exist = ComToolkit.IO.File.Exists(@"c:nyDirnyFile.ext"); WriteAllBytes string[] contents = //some lines of text...ComToolkit.IO.File.WriteAllLines(@"c:nyDirnyFile.ext", bytes); Open AdoFileStream stream = ComToolkit.IO.File.Open(@"c:nyDirnyFile.ext", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite); http://silverlightcom.codeplex.com/
  • 31. Silverlight COM Toolkit ComToolkit.Data stringconnectionString = @"Provider=SQLOLEDB;DataSource=servernameqlexpress;InitialCatalog=databasename;User ID=username; Password=password"; using (var connection = newComToolkit.Data.AdoConnection(connectionString)) { connection.Open(); varcommand = connection.CreateCommand(); command.CommandText= "SELECT MyColumn FROM MyTable"; varreader = command.ExecuteReader(); while(reader.Read()) { objectbyindex = reader[0]; objectbystring = reader["MyColumn"]; //для работы с динамическими свойства reader должен быть объявлен как dynamic //object bydynamic = reader.MyColumn; } } http://silverlightcom.codeplex.com/
  • 32. Silverlight COM Toolkit Асинхронный ComToolkit.Data privateComToolkit.Data.AdoConnection connection; privatevoidExecuteReaderAsyncSample() { connection = newComToolkit.Data.AdoConnection(connectionString); connection.Open(); varcommand = connection.CreateCommand(); command.CommandText= "SELECT MyColumn FROM MyTable"; command.ExecuteReaderCompleted+= new EventHandler<ComToolkit.Data.ExecuteReaderCompletedEventArgs>(command_ExecuteReaderCompleted); command.ExecuteReaderAsync(); } voidcommand_ExecuteReaderCompleted(object sender, ComToolkit.Data.ExecuteReaderCompletedEventArgs e) { //TODO: обрабатываем результат } http://silverlightcom.codeplex.com/
  • 34. XML Paper Specification(XPS) Позитивные факторы В основе лежит ZIP, XML, XAML. Разработан Microsoft и Ecma International, 2006 год Возможность относительно легкой конвертации в XAML Родная поддержка в Windows Vista/7 Негативные факторы Windows XP SP2 требует наличие .NET Framework 3 иXPS Document Viewer
  • 35. PDF Позитивные факторы Бесплатные компоненты для обработки PDF-документа Возможность разместить документ в WebBrowserпри наличии Adobe Acrobat плагина Негативные факторы Платные компоненты для обработки и отображения в Silverlight-приложении
  • 36. HTML Позитивные факторы Возможно разместить внутри элемента управления WebBrowser Негативные факторы Невозможно открывать локальные файлы внутри WebBrowser Невозможно задать заголовочную информацию в WebBrowser Невозможно открыть MHT-файлы Следует собирать все ресурсы в единый HTML-файл, включая изображения, используя Data URI, который имеет ограничение в 32КБ
  • 37. Microsoft Office (Word, Excel, PowerPoint) Позитивные факторы Работа с документами через COM Негативные факторы Отсутствует родная поддержкав Silverlight
  • 38. Microsoft Office (Word, Excel, PowerPoint) Пример обработки Word документа using(dynamic word = AutomationFactory.CreateObject("Word.Application")) { intwdFormatWebArchive = 9; // MHT fileformat intwdDoNotSaveChanges = 0; // WdSaveOptions do not save value using(dynamic document = word.Documents.Open(tempDoc)) { document.SaveAs("C:.doc", refwdFormatWebArchive); } word.Quit(refwdDoNotSaveChanges); }
  • 39. События Office Пример обработки Word документа dynamic word = AutomationFactory.CreateObject("Word.Application"); word.Visible = true; AutomationEventsearchEvent = AutomationFactory.GetEvent(word, "Quit"); searchEvent.EventRaised += (s, a) => { MessageBox.Show("Quit"); }; dynamic document = word.Documents.Open("C:est.doc");
  • 40. Потоки и BackgroundWorker varbw = newBackgroundWorker(); bw.WorkerReportsProgress = true; bw.DoWork+= (s, a) => { varworker = sender asBackgroundWorker; worker.ReportProgress(0, "Сейчас начнем"); MessageBox.Show("Работаем"); worker.ReportProgress(100, «Закончили"); }; bw.ProgressChanged+= (s, a) =>{ MessageBox.Show("Current state" + a.ProgressPercentage.ToString()); // сложные объекты могут передаваться в e.UserState }; bw.RunWorkerCompleted+= (s, a) => { MessageBox.Show("Done"); }; bw.RunWorkerAsync(newDictionary<string, object> { { "file", "test.doc"}, { "region", "Ukraine"} });
  • 41. Navigation Framework Подключение пространства имен в XAML <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" xmlns:uriMapper="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation">
  • 42. Navigation Framework Добавление Frame <navigation:Frame x:Name="ContentFrame" Source="/Action"> <navigation:Frame.UriMapper> <uriMapper:UriMapper> <uriMapper:UriMapping Uri=""MappedUri="/Pages/Action.xaml"/> <uriMapper:UriMapping Uri="/{pageName}"MappedUri="/Pages/{pageName}.xaml"/> </uriMapper:UriMapper> </navigation:Frame.UriMapper> </navigation:Frame> Переход на другую страницу NavigationService.Navigate(newUri("/INeedThisPage", UriKind.Relative));
  • 43. Управление окном Ограничение размера окна // App.xaml privatevoidApplication_Startup(object sender, StartupEventArgs e) { this.RootVisual= newMainPage(); App.Current.Host.Content.Resized += (s, a) => { App.Current.MainWindow.Height = 650; App.Current.MainWindow.Width = 1000; }; } Развернуть окно App.Current.MainWindow.WindowState= WindowState.Maximized;
  • 44. Notification Window var block = newTextBlock(); block.Text = "Wassup!"; varnw = newNotificationWindow(); nw.Height = 50; nw.Width = 300; nw.Content = block; nw.Show(3000);
  • 45. Поздравляю, вы пережили этот доклад Евгений Жарков eu.zharkov@gmail.com @2j2e Слушай подкаст 2Гига