Calendar event helyett ScheduledToastNotification

Mivel Windows 8 alkalmazásban még nem férünk hozzá a naptárhoz, ezért naptári események helyett, időzített emlékeztetőket vehetünk fel, amelyek a felhasználó által kiválasztott időpontban aktiválódnak. Az időpont kiválasztását a Callisto bővítmény jövőben megjelenő DatePicker és TimePicker controlok segítségével tervezem megvalósítani.

Az emlékeztető előnye, hogy akkor is felugrik, ha az alkalmazás éppen nem fut, valamint beállítható hogy bizonyos időközönként ismételve megjelenjen az emlékeztető. Továbbá részletesen testre szabható a kinézete, akár képet is megjeleníthetünk a szöveg mellett.

Hátránya, hogy nem olyan átlátható mint a naptár. Ennek megoldására a felvett emlékeztetőket hozzáadom egy listához, és megjelenítem ItemGridView controlban, így átlátható, hogy mikor és milyen emlékeztetők fognak előugrani a jövőben, és az itt lévő emlékeztetőket akár ki is törölhetem.

Az emlékeztetőkkel egyidejűleg az alkalmazás csempéjére is beállíthatóak időzített változások, ekkor a csempén jelennek meg az emlékeztető információi, melynél szintén testre szabható a kinézet, ám itt a csempe méretétől függően több kinézetet is definiálnunk kell.

Egy fontos dolog, amit sajnos az msnd oldala is figyelmen kívül hagy: Az alkalmazásunk appmanifest beállításaiban a Toast Capable tulajdonságot állítsuk “Yes”-re, mert enélkül nem jelennek meg az emlékeztetők.

Második feladatok – 2. rész

A feladataim közt volt átnézni az alkalmazás életcikluást és ennek debuggolását. Ez az első feladatok közt is szerepelt, de ekkor elegendő információt nem találtam. Viszont a most kapott win8 könyvben pár oldalon erről volt szó.

Az új életciklus modell szerint 3 állapota lehet egy alkalmazásnak:

  • működő alkalmazás,
  • megállított alkalmazás, vagy
  • terminált alkalmazás.

Amikor elindítjuk alkalmazásunkat, akkor lépünk az első állapotba, azaz a működő alkalmazásba. Ha “pihentetjük” az alkalmazásunkat, vagy egy másik alkalmazást indítunk, akkor az alkalmazásunk a megállított állapotba kerül át. Ha visszatérünk eredeti alkalmazásunkhoz, akkor ismét működik az alkalmazásunk. Ha túl régen használtuk az alkalmazást, vagy az operációs rendszer úgy találja, hogy az operatív memória fogyóban van, akkor véglegesen bezárhatja az alkalmazásunkat, mely az állapot mentésének hiányában elveszítheti a felhasználó a teljes munkafolyamatát. Ekkor az alkalmazásunk a terminált állapotban van.

A könyvben még megtalálható a windows 8 stílusú alkalmazások állapotai. Ezek a következők:

  • NotRunning
  • Running
  • Suspended
  • Terminated
  • ClosedByUser

A NotRunning akkor következik be, amikor először fut az alkalmazás, azaz a Windows Store-ból lett telepítve, vagy a Task Manager segítségével zárták be az alkalmazást, vagy felhasználói ki-/bejelentkezés történt, vagy a számítógépet újraindították. Ezeket úgy kezelhetjük, hogy a szokásos módon inicializáljuk és jelenítsük meg az alapértelmezett felhasználói felületet.

A Running akkor következik be, ha a programot a csempéje vagy valamelyik integrációs esemény segítségével indították el. Ekkor le kell kezelni az Activation eseményt.

A Suspended esetén a program pihentetésre került, mivel nem történt egy ideje felhasználói reakció. Ekkor szintén le kell kezelni az Activation eseményt.

A Terminatednél a rendszer kezd kifogyni az erőforrásaiból (pl. tápellátás, szabad operatív memóriaterület, stb…), így kénytelen az alkalmazásunkat pihentetett állapotból véglegesen leállítani. Ilyen esetben a mentett adatokat állítsuk vissza, törekedjünk a felhasználói munkafolyamat szakadásmentes, hiánytalan visszaállítására. Használjuk ehhez az alkalmazásszintű eseményeket!

A ClosedByUser akkor történik meg, ha több, mint 10mp telt el az Alt+F4 vagy bezárás gesztus alapú bezárási események óta. Ilyenkor inicializáljunk a szokásos módon, jelenítsük meg az alapértelmezett felhasználói felületet és indítsunk egy friss munkafolyamatot.

Pár fontos tényező:

  • A pihentetett állapotból lezárásra kerülő alkalmazásokat nem figyelmezteti a Windows 8. A bezárás oka csak a következő futtatáskor derül ki.
  • A Windows 8 stílusú alkalmazásokat úgy tervezték, hogy nem számolunk a felhasználó általi valódi bezárással (Alt+F4), inkább az operációs rendszerre bízzuk az alkalmazások kezelését. Ha mégis valódi bezárás történt, külön lekérdezhető az ApplicationExecutionState felsorolt típus segítségével.
  • Az alkalmazás eltávolításával egy időben az alkalmazáshoz tartozó lokális adatok is eltávolításra kerülnek.
  • Az alkalmazás a Contract & Extension megközelítés segítségével mélyebben integrálható, mely azt jelenti, hogy az konkrét céllal is indítható (pl: fénykép készítése, fájl megnyitása, keresés indítása, stb.). A speciális esetek lekezelése mind az OnLaunched eseményen keresztül történik.

 

Az animációkhoz kerestem anyagot, illetve próbáltam őket létre is hozni több-kevesebb sikerrel, a következő feladat ez lesz. Illetve a 3 layout vezérlőt nézem át tüzetesebben.

HTTP kérés C#-ban

Most meg szeretném mutatni, hogy hogyan lehet lementeni egy weboldal forráskódját, hogy abból fel tudjam dolgozni szükséges adatokat. A megállók neveivel és koordinátáival szerencsém volt, mert megtaláltam egy oldal forráskódjában az összes nevet és koordinátát (buszok, villamosok, trolik). Ez után csak fel kellett dolgoznom ezeket, amiről az előzőbejegyzésem szólt. De sajnos az indulási idők lekérése nem ilyen egyszerű.

Van egy weboldal, ami magába foglalja a összes menetrendet. Itt, ha kiválasztjuk a járatot, akkor az URL cím változik, azaz ha a 10-es választom ki akkor ezt látom: “http://…/10/…”. Erről a weboldalról le tudnám szedni HTTP kéréssel az összes járatnak az menetrendjét, csak ennek forráskódjában nincsenek benne a menetrendadatok. Continue reading

Silverlight Vezérlők a gyakorlatban

Silverlight Vezérlők a gyakorlatban

Mielőtt ezzel jobban megismerkedhetnénk, fel kell telepíteni a Silverlight Toolkit-et. Ezt nagyon egyszerűen letölthetjük a silverlight oldaláról, majd a referenciához hozzá kell adni a System.Windows.Controls.Toolkit.dll-t. Névtérnél is hozzá kell adni: xmlns:toolkit=”clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit” sor beírásával.

ContentControl:

Osztályból származó vezérlők a Content tulajdonságukon keresztül jelenítik meg a tartalmat. Object tipusú. A ContentControl érdekes vonása,hogy önmagában is használható. Összetett objektumokat is képes fogadni.

Button:

A legismertebb ContentControl vezérlők a különböző nyomógombvariánsok. A ButtonBase osztályból származnak.

RepeatButton:

Lényegében nem különbözik a hagyományos gombtól, egy fontosabb tulajdonság kivételével. Nyomva tartásával folyamatosan küldi a Click eseményeket.

HyperlinkButton:

Nevéhez híven átjárót biztosít egy külső weboldalra vagy valamilyen tartalomra.

CheckBox és RadioButton:

Ez a két vezérlő a ToggleButton osztályból származnak. Háromféle állapota lehet: jelölt (checked), nem jelölt (unchecked) és határozatlan (undetermined). A harmadik állapot akkor létezik, ha az adott vezérlőn az IsThreeState tulajdonságot igazra állítjuk. Az alapállapot minden esetben unchecked lesz.

Label:

Funkciója hasonlít a TextBlock-ra, annál jelentősen több lehetőséget biztosít. Valódi vezérlő. Segítségével informatív űrlapokat hozhatunk létre, amivel az adatok érvényességét is képes jelezni. Ez a vezérlő az SDK részét képezi. A SilverlightTools telepítésekor automatikusan hozzáadódik. A label erősen épít az adatkötésre.

ToolTip:

Segítségével információt köthetünk egy-egy vezérlőelemhez. Önmagában is használható, ekkor úgy viselkedik, mint egy label. A leggyakrabban egy másik vezérlőhöz kötjük hozzá, a ToolTipService osztály tulajdonságaival. A ToolTipService objektum Placement tulajdonsága jelöli, hogy a ToolTip a vezérlőhöz képest milyen pozícióban jelenjen meg.

ItemsControl:

Az ItemsControl osztályból származó vezérlők, lehetővé teszik egyszerre több elem megjelenítését. Hasonlóan a ContentConrol-hoz ez is használható önmagában. Ez az elemek kiválasztásának a rovására megy, ugyanis onnantól kezdve ez a lehetőség megszűnik. Az ItemsControls leszármazottak az ItemsSource tulajdonságon keresztül kapják meg a megjelenítendő listára hivatkozó referenciát. Összetett objektumok is lehetnek a lista elemei, ekkor meg kell adnunk, hogy mit akarunk megjeleníteni. Ha nem adunk meg neki semmit, akkor az osztály neve jelenik meg.

ListBox:

A ListBox az ItemsControl-ból eredő Selector osztályból származik. Lehetővé teszi, hogy elemeket válasszunk ki a megjelenített listából. A ListBox minden elemének egy-egy ListBoxItem objektum feleltethető meg, amely a ContentControl osztályból származik. Az elemek kiválasztásának módját a SelectionMode tulajdonsággal állíthatjuk be. Alapértelmezett módon csak egy elemet választhatunk ki. A Multiple és Extended értékek megengedik több elem kiválasztását is. A SelectChanged eseménnyel kezelhetjük a kiválasztott elemek listáját, ennek az eseménynek az eseménykezelője SelectionChangedEventArgs típusú paramétert kap. AddedItems illetve RemovedItems tulajdonságai tömbben tárolják az aktuálisan vagy az előzőleg kiválasztott elemeket.

ComboBox:

A ComboBox vezérlő valójában két részből áll. Egy TextBox-ból és egy lenyíló ListBox-ból. Egy elemet tudunk kiválasztani. Az elemeket a ComboBoxItem jelenítni meg. A ComboBox eseményei és tulajdonságai megegyeznek a ListBox jellemzőivel.

TreeView:

Ez a vezérlő fa-struktúrában képes megjeleníteni az elemeket. Minden eleme TreeViewItem típusú, amely maga is ItemsControl leszármazott, vagyis tartalmazhat több elemet, beleértve további TreeViewItem objektumokat is. A TreeViewItem osztály a HeaderedItemsControl osztályból származik, ezért a tartalmazott listán kívül egy fejléccel (Header) is rendelkezik. A TreeView működése hasonló a ListBox-éhoz, a SelectedItemChanged esemény mutatja a kiválasztott elem változását, amelyet a SelectedItem tulajdonság segítségével kérhetünk le.

TabControl:

A TabControl vezérlő segítségével az alkalmazás ugyanazon területét oszthatjuk szét több elem között. Ez a vezérlő is saját típust használ gyermekei leírására (TabItem), amely a HeaderedItemsControl osztályból származik, és a Header tulajdonság értéke jelenik meg az egyes lapok tetején.  A TabControl kiválóan alkalmas a Silverlightban nem támogatott MDI (Multiple Document Interface) megjelenítési. A TabControl eseményeinek és tulajdonságainak használata megegyezik a többi ItemsControl leszármazottéval.

 

 

 

Második feladatok – 1. rész

Mostani feladataim a következők:

  • win8 könyv átnézése
  • alkalmazás életciklusa és ennek debuggolása
  • windows 8 telepítése a laborban, majd Visual Studio 2012 telepítése
  • mvvm mintapélda készítése
  • animációk készítése: egy villogó gomb, gomb lenyomásra induljon el egy animáció (mozgás), összetettebb animáció
  • képek kezelésével kapcsolatban: le kell tölteni legalább 2db képet. Feladat: jelenjen meg az alkalmazásban (Hogy adod hozzá a projecthez?, milyen control-hoz köttöd és hogyan? Milyen megjelenítési módok vannak?).
  • Layout vezérlők közül pedig az alábbiakat kell tüzetesebben megnézni: FlipView, ListView, Virtualization.

 

A mai nap folyamán telepítettem a windows 8-at, illetve a Visual Studio-t. Ezen kívül megismerkedtem a windows 8 kinézetével, stb. Illetve az mvvm mintapéldához kerestem anyagokat, amivel még később jelentkezem.

Sok szenvedés, kevés haladás Azure + WCF

Hello,

A mai napon még visszatértem az Sql Azure és a WCF kapcsolat felállításához.

Megpróbáltam meg csinálni, hogy telefonról lehessen regisztrálni majd bejelentkezni az adott adatokkal. Tehát a programom loginját szerettem volna megcsinálni. Több gondba is ütköztem és nem is sikerült a haladnom ezzel kapcsolatban.
Első problémám az volt, hogy a saját hibámból kifolyólag elfelejtettem az Sql szerver jelszavamat + felhasználó nevemet. El tartott egy darabig, mire megtaláltam, hol lehet megnézni egyáltalán a felhasználó nevet.
Ha esetleg más is beleszaladna ebbe a buta hiába, akkor egy tipp:
Kiválasztva egy adatbázist, jobb oldalt található egy Show Connection String gomb, amely az alábbi információval szolgál:

Server=tcp:jo9ac2ptj6.database.windows.net,1433;Database=parkoloor;User ID=szucsd@jo9ac2ptj6;Password={your_password_here};Trusted_Connection=False;Encrypt=True;Connection Timeout=30;

Innen legalább a felhasználó nevet meg lehet tudni, szerencsére a jelszót műr innen tudtam.
Szerencsére a tábla kreálás, gyorsan és zökkenőmentesen ment query alapján. Egy észrevétel viszont, hogy amíg a varázslóból készített tábla, egyből megjelenik a baloldali felsorolásban, addig ha query-vel készítjük el, nem fog a varázsló által készítettek között megjelenni, csak később. Ez egy kicsit megzavart, de szerencsére ha újrafuttatjuk a queryt, akkor közli velünk, hogy már létezik az a tábla amit létre akartunk hozni.

Majd nekiálltam az Azure Projectnek VS-ben. Refactoringot használva átnevezgettem a project neveket.
A következő nehézségbe, akkor futottam bele, amikor az ADO .NET Entity Data Model -t szerettem volna elkészíteni a projectemhez. A már meglévő táblám alapján szerettem volna elkészíteni ezt a Data Modelt. Azonban, kitöltve a szerver kapcsolódási adatokat egy hibába futottam bele. Érdekes módon a Test Connection hibátlanul működött, tudtam válogatni az adatbázisaim között, viszont ha tovább szerettem volna lépni, akkor az alábbi error fogadott:

failed to retrieve data for this request. unknown property primaryfilepath 

Gyorsan próbáltam keresni valami megoldást de nem találtam egyenlőre. Legközelebb még a héten, ezt meg szeretném oldani, hiszen ez egy elég fontos része a dolgozatomnak. Remélhetőleg gyorsan találok rá valami megoldást.

Legközelebbi cél, hogy a reg/logint működésre bírjam és a WP7 funkciókat szépen implementáljam. Köztük a fénykép készítést, gps logolást, interface kialakítása, adatküldés és tárolás azureban.

Üdv.

Dávid