Silverlight 4, есть ли жизнь на десктопе
-
Upload
alex-tumanoff -
Category
Technology
-
view
818 -
download
2
description
Transcript of Silverlight 4, есть ли жизнь на десктопе
![Page 1: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/1.jpg)
Silverlight 4, есть ли жизнь на десктопе?
Евгений ЖарковSilverlight MVP/MCTS
![Page 2: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/2.jpg)
Windows Phone 7ПК
Silverlight
Браузер Вне браузера
![Page 3: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/3.jpg)
Out of browser (OOB)
• Управление окном• Настройка внешнего вида окна• Размещения HTML внутри приложения• Окна уведомлений• Digital Rights Management (DRM)• Расширенные права• Доступ к файловой системе• COM• Интегрированная возможность обновления
![Page 4: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/4.jpg)
Активация OOB
![Page 5: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/5.jpg)
Конфигурация OOB
![Page 6: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/6.jpg)
Инсталляция
Довели до ума
![Page 7: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/7.jpg)
Elevated trust
Доступ к буферу обмена
Прямой доступ к
папке User
COM
Кросс-доменные
запросы
![Page 8: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/8.jpg)
Установка доверенных приложений
![Page 9: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/9.jpg)
Подпись XAP
![Page 10: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/10.jpg)
/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
/install:"xapFile" – where xapFile is the file name/file path to the .xap file., E.g. /install:"c:\temp\sample.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.
Инсталляция
Деинсталляция
![Page 11: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/11.jpg)
sllauncher.exe /install:"{LocalPathToXapFile}\Yourfile.xap" /origin:"{urltoxapfile}/Yourfile.xap" /shortcut:desktop+startmenu
Тихая установка XAP
Установка
"%ProgramFiles%\Microsoft Silverlight\sllauncher.exe" /emulate:"Yourfile.xap" /origin:"http://blabla.com/Yourfile.xap"
Автозапуск
"%ProgramFiles%\Microsoft Silverlight\sllauncher.exe" /uninstall /origin:"http://blabla.com/Yourfile.xap"
Деинсталляция
![Page 12: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/12.jpg)
Тихая установка 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.
![Page 13: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/13.jpg)
Тихая установка Silverlight
Silverlight.exe /q /doNotRequireDRMPrompt
Результирующая строка
![Page 14: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/14.jpg)
NSIS Script ExampleName “Test Out of Browser Installer"OutFile “TextOOBInstaller.exe"InstallDir "$PROGRAMFILES\TestOOB"
XPStyle on
Section SetOutPath "$INSTDIR" SetOverwrite ifnewer File "Silverlight.exe" ExecWait "$INSTDIR\Silverlight.exe /q /doNotRequireDRMPrompt" File “TestOOB.xap" ExecWait '"$PROGRAMFILES\Microsoft Silverlight\sllauncher.exe"
/install:"$INSTDIR\TestOOB.xap" /origin:"http://blabla.com/TestOOB.xap" /shortcut:desktop+startmenu'
SectionEnd
![Page 15: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/15.jpg)
Batch Script:: Is this a 64-bit machine?@echo offif exist "%ProgramFiles(x86)%" (:: We're on 64-bit set sllauncherlocation="%ProgramFiles(x86)%\Microsoft Silverlight\sllauncher.exe") else (::We're on 32-bit set sllauncherlocation="%ProgramFiles%\Microsoft Silverlight\sllauncher.exe"):: run SL%sllauncherlocation% /overwrite /emulate:“TestOOB.xap" /origin:"http://blabla/TestOOB.xap"
![Page 16: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/16.jpg)
Мои документы
Мои документы
My Documents
Documents
Eigene Dateien
Mes documents
我的文件
Τα έγγραφά
μου
![Page 17: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/17.jpg)
Batch Script User Folder
FOR /F "tokens=3 delims= " %%G IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') DO (SET docsdir=%%G)
Извлекаем правильный адрес директории “Мои документы” из реестра
![Page 18: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/18.jpg)
Многоязычный интерфейс
Добавление поддерживаемых культур в файл проекта
<?xml version="1.0" encoding="utf-8"?><Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <!– настройки --> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion> <SilverlightApplication>true</SilverlightApplication>
<SupportedCultures>en-US,ru-RU,uk-UA</SupportedCultures>
<XapOutputs>true</XapOutputs>
![Page 19: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/19.jpg)
Многоязычный интерфейс
Добавляем ресурсы с локализованным
текстом
![Page 20: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/20.jpg)
Многоязычный интерфейс
Установить модификатор доступа
в Public
![Page 21: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/21.jpg)
Многоязычный интерфейс
<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>
Регистрация ресурса
![Page 22: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/22.jpg)
Многоязычный интерфейс
public class LocalizationResource : INotifyPropertyChanged { private static Localization.Strings resource = new Localization.Strings();
public Localization.Strings Strings { get { return resource; } set { OnPropertyChanged("Strings"); } }
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }
#endregion }
Регистрация ресурса
![Page 23: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/23.jpg)
Многоязычный интерфейс
Thread.CurrentThread.CurrentUICulture = new CultureInfo("uk-UA"); ((LocalizationResource)Application.Current.Resources["Localization"]).Strings = new MyApplication.Localization.Strings();
Переключение языка UI
![Page 24: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/24.jpg)
COM
using System.Runtime.InteropServices.Automation;
Подключаем пространство имен
using (dynamic fsoCom = AutomationFactory.CreateObject("Scripting.FileSystemObject")){ dynamic file = fsoCom.CreateTextFile(@"c:\test.txt", true); file.WriteLine("Bloody Hell!"); file.WriteLine("Silverlight is writing to C:\\"); file.Close();}
Создаем файлы в любом месте на ПК
![Page 25: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/25.jpg)
COM
using (dynamic ShellApplication = ComAutomationFactory.CreateObject("Shell.Application")){ dynamic commonPrograms = ShellApplication.NameSpace(23); string allUsersPath = commonPrograms.Self.Path;
dynamic directory = ShellApplication.NameSpace(allUsersPath + @"\Accessories"); 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(); } }}
Пиним приложение на панель задач
![Page 26: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/26.jpg)
COM
using (dynamic ShellApplication = ComAutomationFactory.CreateObject("Shell.Application")){ dynamic commonPrograms = ShellApplication.NameSpace(11); string allUsersPath = commonPrograms.Self.Path;
dynamic directory = ShellApplication.NameSpace(allUsersPath + @"\Programs"); dynamic link = directory.ParseName(Deployment.Current.OutOfBrowserSettings.ShortName + ".lnk"); string OOBLink = link.Path;
using (dynamic WShell = ComAutomationFactory.CreateObject("WScript.Shell")) { WShell.RegWrite(@"HKLM\Software\Microsoft\Windows\CurrentVersion\Run\" + Deployment.Current.OutOfBrowserSettings.ShortName, OOBLink); MessageBox.Show("Please restart your machine and this application will load on startup."); }}
Добавляем OOB-приложение в автозагрузку
![Page 27: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/27.jpg)
COM
using (dynamic IDbConnection = ComAutomationFactory.CreateObject("ADODB.Connection"))using (dynamic IDbCommand = 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();}
Работа с ODBC
![Page 28: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/28.jpg)
Тихая установка MSSQL
sqlexpr32.exe -q /norebootchk /qn REBOOT=ReallySuppress INSTANCENAME="name" ADDLOCAL=ALL SECURITYMODE=SQL SAPWD="password" SQLAUTOSTART=1 DISABLENETWORKPROTOCOLS=0
Express
msiexec /quit /i SSCERuntime-ENU-x86.msi
Compact Edition
![Page 30: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/30.jpg)
Silverlight COM Toolkit
http://silverlightcom.codeplex.com/
ComToolkit.IO.File.Copy(@"c:\AnyDir\AnyFile.ext", @"c:\AnyDir\AnyFile2.ext", true);
Copy
string[] contents = //some lines of text... ComToolkit.IO.File.WriteAllLines(@"c:\AnyDir\AnyFile.ext", bytes);
WriteAllBytes
bool exist = ComToolkit.IO.File.Exists(@"c:\AnyDir\AnyFile.ext");
Exists
AdoFileStream stream = ComToolkit.IO.File.Open(@"c:\AnyDir\AnyFile.ext", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite);
Open
![Page 31: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/31.jpg)
Silverlight COM Toolkit
http://silverlightcom.codeplex.com/
string connectionString = @"Provider=SQLOLEDB;Data Source=servername\sqlexpress;Initial Catalog=databasename;User ID=username; Password=password";using (var connection = new ComToolkit.Data.AdoConnection(connectionString)) { connection.Open(); var command = connection.CreateCommand(); command.CommandText = "SELECT MyColumn FROM MyTable"; var reader = command.ExecuteReader(); while (reader.Read()) { object byindex = reader[0]; object bystring = reader["MyColumn"]; // для работы с динамическими свойства reader должен быть объявлен
как dynamic //object bydynamic = reader.MyColumn; } }
ComToolkit.Data
![Page 32: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/32.jpg)
Silverlight COM Toolkit
http://silverlightcom.codeplex.com/
private ComToolkit.Data.AdoConnection connection; private void ExecuteReaderAsyncSample() { connection = new ComToolkit.Data.AdoConnection(connectionString); connection.Open(); var command = connection.CreateCommand(); command.CommandText = "SELECT MyColumn FROM MyTable"; command.ExecuteReaderCompleted += new EventHandler<ComToolkit.Data.ExecuteReaderCompletedEventArgs>(command_ExecuteReaderCompleted); command.ExecuteReaderAsync(); }
void command_ExecuteReaderCompleted(object sender, ComToolkit.Data.ExecuteReaderCompletedEventArgs e) { //TODO: обрабатываем результат}
Асинхронный ComToolkit.Data
![Page 33: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/33.jpg)
Работа с документами
Desktop Application
![Page 34: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/34.jpg)
XML Paper Specification (XPS)
• В основе лежит ZIP, XML, XAML. Разработан Microsoft и Ecma International, 2006 год
• Возможность относительно легкой конвертации в XAML• Родная поддержка в Windows Vista/7
Позитивные факторы
• Windows XP SP2 требует наличие .NET Framework 3 и XPS Document Viewer
Негативные факторы
![Page 35: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/35.jpg)
• Бесплатные компоненты для обработки PDF-документа• Возможность разместить документ в WebBrowser при
наличии Adobe Acrobat плагина
Позитивные факторы
• Платные компоненты для обработки и отображения в Silverlight-приложении
Негативные факторы
![Page 36: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/36.jpg)
HTML
• Возможно разместить внутри элемента управления WebBrowser
Позитивные факторы
• Невозможно открывать локальные файлы внутри WebBrowser• Невозможно задать заголовочную информацию в WebBrowser• Невозможно открыть MHT-файлы• Следует собирать все ресурсы в единый HTML-файл, включая
изображения, используя Data URI, который имеет ограничение в 32КБ
Негативные факторы
![Page 37: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/37.jpg)
Microsoft Office (Word, Excel, PowerPoint)
• Работа с документами через COMПозитивные факторы
• Отсутствует родная поддержка в Silverlight
Негативные факторы
![Page 38: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/38.jpg)
Microsoft Office (Word, Excel, PowerPoint)
using (dynamic word = AutomationFactory.CreateObject("Word.Application")){ int wdFormatWebArchive = 9; // MHT fileformat int wdDoNotSaveChanges = 0; // WdSaveOptions do not save value
using (dynamic document = word.Documents.Open(tempDoc)) {
document.SaveAs("C:\t.doc", ref wdFormatWebArchive); } word.Quit(ref wdDoNotSaveChanges);}
Пример обработки Word документа
![Page 39: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/39.jpg)
События Office
dynamic word = AutomationFactory.CreateObject("Word.Application");word.Visible = true;
AutomationEvent searchEvent = AutomationFactory.GetEvent(word, "Quit");searchEvent.EventRaised += (s, a) =>{ MessageBox.Show("Quit");};
dynamic document = word.Documents.Open("C:\test.doc");
Пример обработки Word документа
![Page 40: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/40.jpg)
Потоки и BackgroundWorkervar bw = new BackgroundWorker();bw.WorkerReportsProgress = true;
bw.DoWork += (s, a) => {var worker = sender as BackgroundWorker;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(new Dictionary<string, object> { { "file", "test.doc" }, { "region", "Ukraine"} });
![Page 41: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/41.jpg)
Navigation Framework
<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">
Подключение пространства имен в XAML
![Page 42: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/42.jpg)
Navigation Framework
<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>
Добавление Frame
NavigationService.Navigate(new Uri("/INeedThisPage", UriKind.Relative));
Переход на другую страницу
![Page 43: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/43.jpg)
Управление окном
// App.xamlprivate void Application_Startup(object sender, StartupEventArgs e){ this.RootVisual = new MainPage(); App.Current.Host.Content.Resized += (s, a) => { App.Current.MainWindow.Height = 650; App.Current.MainWindow.Width = 1000; };}
Ограничение размера окна
App.Current.MainWindow.WindowState = WindowState.Maximized;
Развернуть окно
![Page 44: Silverlight 4, есть ли жизнь на десктопе](https://reader035.fdocuments.net/reader035/viewer/2022062616/5497386ab47959c3748b45f1/html5/thumbnails/44.jpg)
Notification Windowvar block = new TextBlock();block.Text = "Wassup!";
var nw = new NotificationWindow();nw.Height = 50;nw.Width = 300;nw.Content = block;nw.Show(3000);