“Kaptam a minap egy levelet” – Azure Team…
No! Én sose voltam jó se fogalmazásból, se helyesírásból de most úgy érzem picit én is fricskázhatok. Kaptam egy levelet a Windows Azure Team-től, és ez annyira jól sikerült, hogy muszá(pontoselipszilonosjé) megosztanom veletek.
Tisztelt Ügyfelünk!
Azért vesszük fel Önnel a kapcsolatot, hogy biztosíthassuk, megfelelő támogatási lehetőségekkel rendelkezzen a támogatási igényeinek jövőbeni kielégítéséhez.
A múlt hónapban bejelentettük a Windows Azure támogatási modelljének változásait. Annak érdekében, hogy az ügyfeleink könnyedén áttérhessenek az új folyamatra, a Microsoft díjmentes Standard szintű támogatást biztosít 2012. 12. 31. napjáig. Most, hogy már 12. hó van, reméljük, elég ideje volt annak biztosítására, hogy megfelelő támogatási lehetőségekkel rendelkezzen a támogatási igényeinek jövőbeni kielégítéséhez
A Google (akarom mondani) Bing translate még nincs a helyzet magaslatán.
De komolyan, engem az se zavar, ha helyesírási hibák vannak benne (legalább látszik, hogy dolgoztak vele) de ez azért ciki.
A levél:
Keresés – Search Contract
A Windows 8-ban a keresés funkció új dimenziókat nyit meg a fejlesztők számára. Ugyanis most már nem a start menü kereső mezője segítségével keresünk, hanem a Charm Bar lesz a társunk ebben a feladatban. Ráadásul nemcsak a fájlrendszeren tudunk keresni, hanem az alkalmazásunkban/alkalmazásokban is. Ahhoz, hogy ez működjön, egy úgynevezett „keresési szerződést” kell kötnünk a rendszerrel. (Maradjunk a Search Contract definíciónál!)
Nézzünk egy egyszerű esetet! A Solution Explorer-ben kattintsunk a Package.appxmanifest fájlra, majd válasszuk ki a Declarations tabfület! Az Available Declarations listából válasszuk ki a Search lehetőséget, és kattintsunk az Add gombra! (A tulajdonságokat most nem töltjük ki.)
Mostantól lehetőségünk van az alkalmazásból keresni. Nézzük meg, hogy mi a különbség aközött, ha van Search Contract, illetve ha nincs. A bal oldali képen az látható, ha az alkalmazásunkban nincs Search Contract. Ekkor a „This app can’t be searched” üzenetet kapjuk. Míg ha már van Search Contract, akkor megjelenik az alkalmazásunk neve, és kereshetünk benne. Természetesen a keresés mikéntjét nekünk kell megírnunk.
Ha valamit kerestünk a keresőmezőben, azt az alkalmazásunk App.xaml.cs állományában az OnSearchActivated metódusnál (override), a SearchActivatedEventArgs QueryText tulajdonságával kérdezhetjük le.
protected override void OnSearchActivated(SearchActivatedEventArgs args)
|
Megosztás – Share
Manapság minden a megosztásról szól. Miért ne oszthatnánk meg az alkalmazásunkban található tartalmat is másokkal? Legyen szó egyszerű szövegről, képről vagy összetett objektumról! Nem hiába található a Charm bar -on megosztás gomb!
Természetesen ehhez is egy jól definiált API áll a rendelkezésünkre. Csakúgy mint a vágólap kezelésnél, itt is a Windows.ApplicationModel.DataTransfer névtér lesz a segítségünkre.
using Windows.ApplicationModel.DataTransfer; |
Szükségünk lesz egy DataTrasferManager példányra. Ezt most a konstuktorban hozzuk létre úgy, hogy meghívjuk DataTrasferManager osztály GetForCurrentView metódusát, majd feliratkozunk a DataRequest eseményre.
DataTransferManager dt;
void dt_DataRequested(DataTransferManager sender, DataRequestedEventArgs args) |
A DataRequest esemény törzsében a DataPacake-nek meghatározzuk a címét (Title), leírását (Description), illetve ha csak egyszerű szöveget akarunk átadni, akkor a SetText metódusát hívjuk meg, és ennek átadjuk a tartalmat. Ha a Charm bar -on a Posta menüpontot választjuk ki, akkor a levelünk tárgya a Recept könyv szöveg lesz, míg a levél törzse pedig, az amit a, SetText metódus paramétereként adtunk meg. Figyeljük meg, hogy a Description nem jelent meg sehol! Ez most azért van, mert ez az alkalmazás ezt nem támogatja és nem dolgozza fel. (Saját alkalmazásunk ezt feldolgozhatja)
Ha meg szeretnénk jeleníteni a Charm Bar Share menüpontját, ezt a DataTransferManager ShowShareUI metódusával tehetjük meg.
DataTransferManager.ShowShareUI(); |
Vágólap – Clipboard
Gyakori eset, hogy az alkalmazásunkból valamilyen adatot a vágólapra szeretnénk helyezni, vagy épp onnan betölteni. Természetesen ehhez is megvannak a megfelelő API-jaink, amivel ez egyszerűen lehetséges. Azt viszont fontos szem előtt tartanunk mindig, hogy milyen adatot is szeretnénk mi a vágólapra helyezni vagy épp onnan betölteni. Ugyanis nem mindegy, hogy egyszerű szöveget, HTML dokumentumot vagy épp egy képet szeretnénk a vágólapra helyezni / betölteni. A vágólap használatához a Windows.ApplicationModel.DataTransfer névtérre lesz szükségünk.
using Windows.ApplicationModel.DataTransfer; |
A legegyszerűbb az egyszerű szöveg elhelyezése és betöltése a vágólapról. Az alábbi példában egy DataPackage osztályt példányosítunk, amelynek meghívjuk a SetText metódusát. Ennek paraméteréül egy szting szöveget kell adnunk. (Ebben az esetben egy txtMsg textbox Text tulajdonságát adjuk meg számára. Ezt követően a Cliboard SetContent metódusának a korábban létrehozott DataPackage példányt adjuk át.
DataPackage dt = new DataPackage(); |
A beillesztés legalább ilyen egyszerű. Ehhez a Clipboard GetContent metódusát kell meghívnunk, melynek a visszatérési értéke egy DataPackageView példány. De mielőtt még az adatot beillesztenénk célszerű, megvizsgálni, hogy egyáltalán van-e megfelelő “formátumú” adat a vágólapon. Ha van, akkor a DataPackageView példány (clipboardData) GetTextAsync metódusát kell meghívnunk. Ennek a visszatérési értéke egy sztring. (Ebben a példában egy tbRes nevű TextBlock vezérlőbe íratunk ki.)
DataPackageView clipboardData = Clipboard.GetContent(); |
Html tartalom elhelyezése és beillesztése ugyanilyen egyszerű. Csak ebben az esetben nem a SetText, hanem a SetHtmlFormat metódust kell meghívnunk, majd a DataPackage-t ugyanúgy, mint korábban, át kell adnunk a Clipboard SetContent metódusának.
DataPackage dt = new DataPackage(); string htmldoc = @"<!DOCTYPE html> dt.SetHtmlFormat(htmldoc); |
A beillesztés hasonló analógiával történik. Ugyanúgy meg kell hívni a Clipboard GetContent metódusát, csak itt az ellenőrzésnél a StandardDataFormats osztály Html tulajdonságát kell átadnunk a Contains metódusnak, hogy ellenőrizzük, hogy tényleg van HTML tartalom a vágólapon. A beillesztés itt természetesen a GetHtmlFormatAsync aszinkron metódussal történik! (Ebben az esetben egy webViewControl nevű WebView vezérlőnek adjuk át a beillesztett HTML tartalmat)
DataPackageView clipboardData = Clipboard.GetContent();
webViewControl.NavigateToString(await clipboardData.GetHtmlFormatAsync()); |
Természetesen akár képet vagy más összetett objektumokat is elhelyezhetünk a vágólapra. Ezekhez külön speciális metódusok társulnak.
Egy DataPackage-ben akár több adatot is elhelyezhetünk a vágólapra! Például: egyszerre elhelyezhetünk egyszerű szöveget és képet is a váglólapra. A beillesztésnél mondjuk meg, hogy mit szeretnénk beilleszteni: szöveget vagy képet, esetleg rtf dokumentumot stb.
Helyi menü – ContextMenu
Klasszikus értelemben vett helyi vagy más néven context menü nincs a Windows Store alkalmazásoknál. Illetve van, csak nem úgy, mint ahogy azt a fejlesztők nagy része korábban megszokta a Windows rendszereknél. UI szempontból nem a legszerencsésebb a helyi menük használata, de ha úgy döntünk, hogy számunkra ez feltétlen fontos, akkor persze van rá lehetőségünk. Ehhez szükségünk lesz a Windows.UI.Popups névtérre.
using Windows.UI.Popups |
Ennek a használatához példányosítanunk kell egy PopupMenu osztályt, majd ennek a Commands gyűjteményéhez hozzá kell adnunk a UICommand-jainkat. A UICommand első paramétere a megnevezés (ez lesz megjelenítve a helyi menüben), a második paramétere pedig egy UICommandInvokedHandler delegate. Itt megadhatjuk inline módon is futtatandó kódjainkat.
PopupMenu menu = new PopupMenu();
menu.Commands.Add( |
A Popup menü kész, itt az ideje megjeleníteni! Ehhez két metódus is a segítségünkre lehet. Az egyik a ShowAsync, amelynek egy Point objektumot kell átadnunk. Ez a Point objektum mondja meg, hogy a képernyőn hol jelenjen meg a helyi menü. Jelen esetben a bal felső sarokban lesz látható a helyi menü. (X: 1, Y: 1)
menu.ShowAsync(new Point(1, 1)); |
A második helyi menü megjelenítésére használatos metódus a ShowForSelectionAsync, amelynek egy Rect példányt kell átadnunk. (Ezt gyakrabban használjuk.)
menu.ShowForSelectionAsync(new Rect(1, 1, 100, 100)); |
WebView
A WebView vezérlő egy olyan egyszerű vezérlő, amelynek segítségével HTML tartalmakat tudunk megjeleníteni az alkalmazásunkon belül. Sőt, akár ha egyszerű szövegbe írunk HTML tartalmat, azt is meg tudja jeleníteni számunkra. A szövegben akár JavaScript is lehet.
A felhasználó felületre dobjunk fel egy TextBox-ot (Name: txtUri), egy Button-t (Content: GO) és egy WebView vezérlőt (Name: webView)! A gomb klikk eseményének törzsébe írjuk a következőket:
Uri resUri = new Uri(txtUri.Text, UriKind.Absolute); |
Ennek az eredménye az, hogy az alkalmazás betölti azt az oldalt, aminek a címét a txtUri mezőbe írtuk.
De nemcsak meglévő oldalra tudunk ellátogatni. Akár helyileg is létrehozhatunk egy HTML dokumentumot, amit a WebView vezérlőjével megjeleníthetünk. Ebben az esetben a GO gomb klikk eseményének törzsébe írjuk a következőt:
string htmldoc =
@"<!DOCTYPE html>
webView.NavigateToString(htmldoc); |
A htmldoc egyszerű sztring amiben egy HTML dokumentumot fogalmaztunk meg. (Ebben a dokumentumban akár JavaScript is lehet!) Ezt a sztringet átadjuk a webView NavigateToString metódusának. Ezt követően láthatjuk a HTML oldalunkat a WebView vezérlőben!
HttpClient
Nagyon sok alkalmazásnál előfordul az, hogy HTTP-n akar kommunikálni. Legyen szó egy egyszerű weboldal letöltéséről vagy épp REST-es szolgáltatás hívásról. A HttpClient sokat segíthet nekünk. A HTTP műveleteket támogatja (GET – GetAsync(), POST – PostAsync(), PUT – PutAsync(), DELETE – DeleteAsync()), és ezen műveletek segítségével HTTP kéréseket fogalmazhatunk meg. Nézzük meg a legegyszerűbbet, a GET-et! A webes kérések legnagyobb része a GET, és most megnézzük, hogy miként kérjük le egy weboldal teljes tartalmát. Ehhez szükségünk lesz majd a System.Net.Http névtérre.
using System.Net.Http; |
A felhasználó felületre dobjunk fel egy TextBox-ot (Name: txtUri), egy Button-t (Content: GET) és egy TextBlock-ot (Name: tbResult)! A gomb klikk eseményének törzsébe írjuk a következőket:
Uri resUri = new Uri(txtxUri.Text, UriKind.Absolute);
|
Itt készítünk egy Uri objektumot, aminek a címe az a Http cím, amit a Textboxba beírtunk. (Ha helytelen a cím akkor hibát fogunk majd kapni.) Ezt követően példányosítsuk a HttpClient osztályt, majd hívjuk meg a HttpClient példány GetAsync metódusát. Ennek a metódusnak egy Uri címet kell átadnunk. Mint látható, ez is egy aszinkron metódus, amelynek visszatérési értéke egy HttpResponseMessage. A következő sorban pedig egyszerűen csak kiolvassuk a tartalmát a ReadAsStringAsync metódussal. Az eredmény pedig valami ilyesmi lesz:
MessageDialog, avagy a MessageBox utódja
A Windows Store alkalmazásoknál nincs MessageBox, mint a WPF-nél vagy a Windows Formsnál. A fejlesztők nagyon szeretik az üzenet ablakokat feldobni, mert gyorsan és egyszerűen tudnak üzenetet küldeni a felhasználói felületre. Ez a lehetőség viszont Windows Store alkalmazásoknál nem így működik. MessageBox osztály nem létezik, helyette viszont van MessageDialog, ami a Windows.UI.Popups névtérben található.
using Windows.UI.Popups; |
A MessageDialog használata valamivel összetettebb, mint a MessageBox-é, de cserébe sokkal többet nyújt a feljesztők számára, mint a MessageBox. Nézzünk egy egyszerű példát:
Első példánkban egy üzenetet dobunk fel. Ehhez mindösszesen egy MessageDialog-ot kell példányosítanunk, a megfelelő argumentumokat átadni majd a ShowAsync metódust meghívni.
MessageDialog mDialog = new MessageDialog("Figyelmeztetés!", "Alkalmazás neve"); |
Ennek az eredménye az alábbi párbeszédablak lesz.
Figyeljük meg, hogy egy Close gomb van csak a párbeszédablakban! A MessageBox-ban ezek a lehetőségek korlátozottak voltak. A MessageDialog-nál ez sokkal testreszabhatóbb. Ha új gombokat szeretnénk hozzáadni, akkor a MessageDialog példány Commands gyűjteményéhez kell új UICommand-ot hozzáadnunk. Az alábbi példában egy Igen és egy Nem gombot adunk a felhasználói felülethez.
MessageDialog mDialog = new MessageDialog("Figyelmeztetés!", "Alkalmazás neve"); mDialog.Commands.Add( new UICommand("Igen"));
mDialog.Commands.Add( new UICommand("Nem"));
mDialog.ShowAsync(); |
Az eredménye mint látható egy olyan MessageDialog, amelyen van egy Igen és egy Nem gomb.
A gombok sorrendje nem más mint, a Commands gyűjteményhez adás sorrendje. Tehát, ha előbb adjuk hozzá a Nem UICommandot, mint az Igent, akkor az lesz a sorrendben elöl.
MessageDialog mDialog = new MessageDialog("Figyelmeztetés!", "Alkalmazás neve"); mDialog.Commands.Add( new UICommand("Nem"));
mDialog.Commands.Add( new UICommand("Igen")); mDialog.ShowAsync(); |
Az eredmény az alábbi képen látható.
Figyeljük meg, hogy ebben az esetben a Nem gomb van kijelölve alapértelmezett gombnak! Ha ezt befolyásolni szeretnénk, akkor a DefaultCommandIndex-szel tehetjük meg az alábbi módon:
MessageDialog mDialog = new MessageDialog("Figyelmeztetés!", "Alkalmazás neve"); mDialog.Commands.Add(
|
Ennek az eredménye a következő MessageDialog lesz:
Figyeljük meg, hogy ebban az esetben az Igen gomb van alapértelmezett gombnak beállítva!
Eddig gombokat adtunk a MessageDialoghoz, de funkciókat ezekhez a gombokhoz nem társítottunk.
A következő példában ezt fogjuk megtenni, mégpedig a UICommand létrehozásánál kell megmondanunk, hogy adott gomb megnyomására milyen legyen az alkalmazás viselkedése. Az egyszerűség kedvéért mi most csak egy szövegmezőbe írjuk ki az IGEN vagy a NEM szavakat annak megfelelően, hogy a felhasználó melyikre kattintott!
MessageDialog mDialog = new MessageDialog("Figyelmeztetés!", "Alkalmazás neve"); mDialog.Commands.Add(
|
Windows Store – Bing Maps API használata
Ebben a feladatban egy Bing Maps térképet fogunk megjeleníteni az alkalmazásunkban. Ne feledjük el a Bing Maps szolgáltatáshoz szükséges előkészületeket megtenni!
A projektünkben kattintsunk a References-re jobb egérgombbal, majd a megjelenő helyi menüből válasszuk ki az Add Reference… menüpontot!
A megjelenő Reference Manager ablakban, a Windows alatt kattintsunk az Extension menüpontra! A listából válasszuk ki a Bing Maps for C#, C++, or Visual Basic library-t, és klikkeljünk az OK gombra!
Sajnos ebben a pillanatban még nem haszálhatjuk ezt a library-t. Egy sárga felkiáltójel jelenik meg a Bing Maps library mellett.
The processor architecture of the project being built "Any CPU" is not supported by the referenced SDK "Bing.Maps.Xaml, Version=1.0". Please consider changing the targeted processor architecture of your project (in visual studio this can be done through the Configuration Manager) to one of the architectures supported by the SDK: "x86, x64, ARM".
|
Hogy ezt kiköszöböljük, kattintsunk a BUILD menüponton belül a Configuration Manager… elemre!
A megjelenő Configuration Manager ablakban a Platformot állítsuk át most x86-ra! Ezt követően már nekikezdhetünk a munkának.
Most már elkezdhetjük a munkát a térképpel. Nyissuk meg a MainWindows.xaml-t! (Vagy azt az oldalt, amiben szeretnénk használni) Az XML névterek közé vegyük fel a Bing.Maps névteret:
xmlns:Maps="using:Bing.Maps"
|
A térképet a Maps osztály segítségével használhatjuk. A Credentials tulajdonságnál meg kell adnunk azt a kulcsot, amit a Bing Maps portálon kaptunk, hogy használhassuk a Bing Maps térkép szolgáltatást.
<Maps:Map Credentials="AmnrGdyleHvu6FPIsIm_Q0lkQINvY5oeb…">
|
Most már használhatjuk a Bing Maps térkép szolgáltatását!
Bing Maps – regisztráció
Ahhoz, hogy a Bing Maps térképszolgáltatását használjuk, egy Windows Store alkalmazásba előbb ezt a komponenst külön le kell töltenünk. Ezt a komponenst alapértelmezettként nem tartalmazza a Windows Store API. A Bing Maps SDK for Windows Store apps-ot innen tölthetjük le.
Letöltés után telepítsük fel!
Ez egy ingyenes SDK, bárki szabadon használhatja (a Bing Maps licencszerződésének megfelelően). De ahhoz, hogy használjuk, szükségünk lesz egy API Key-re, amit ingyenesen igényelhetünk. Látogassunk el a http://www.bingmapsportal.com oldalra, és kattintsunk a Sign in gombra, majd a Windows Live ID–nk (Microsoft Account) segítségével jelentkezzünk be! (Ha még nincs Windows Live ID-nk (Microsoft Account az új neve), akkor ingyenesen létrehozhatunk egyet. Ebben az esetben a New User menüpontot kell választanunk.)
A bejelentkezést követően kattintsunk a bal oldali menüsávon található Create or view keys menüpontra!
A Create Key alatt adjuk meg az alkalmazásunk nevét, URL-jét (opcionális), a kulcs típusát állítsuk Trial-ra, az Application Type-ot pedig Windows Store app-ra, majd kattintsunk a Submit gombra!
Néhány másodpercen belül megjelenik az API Key-nk. Erre szükségünk lesz a fejlesztés során.