Walkthrough

Această prezentare vă arată cum să creați o extensie de shell pentru LightSwitch. Cochila pentru aplicația Visual Studio LightSwitch permite utilizatorilor să interacționeze cu aplicația. Manifeste ale căii navigabile la elementele sale, efectuate de ecrane, comenzi, date asociate utilizatorului curent și alte informații utile care fac parte din domeniul coajă. Atunci când LightSwitch oferă o structură puternică directă și coajă, puteți crea propriul shell, care oferă propriile instrumente creative pentru a interacționa cu diferite părți ale aplicației LightSwitch.







Acest walkthrough creează un înveliș care seamănă cu shell-ul implicit, dar cu câteva diferențe subtile în aspectul și reacția la eveniment. Bara de comandă exclude grupurile de comenzi și mută butonul Designer Screen spre stânga. Meniul de navigare este fixat în poziție, ecranul de pornire nu afișează niciun ecran și ecranele sunt deschise făcând dublu clic pe elementele de meniu. Ecranele implementează un alt semn de test și datele utilizatorului curent sunt afișate întotdeauna în colțul din stânga-jos al cocii. Aceste diferențe pot fi văzute în mai multe metode utile pentru crearea unei extensii de shell.

Schema de extindere a coajelor este formată din 3 părți principale:

Gestionarea extensibilității platformei .NET Framework (platforma MEF) care exportă implementarea contractului shell.

O limbă extensibilă XAML care descrie comenzile care sunt utilizate pentru interfața cu utilizatorul shell.

Visual Basic sau cod în limba c #, limbajul XAML care implementează comportamentul comenzilor și interacționează cu timpul de rulare al LightSwitch.

Crearea unei extensii de shell include următoarele sarcini:

Crearea unui proiect de extensie

În bara de meniu, faceți clic pe Fișier în Visual Studio, faceți clic pe Proiect nou.

În caseta de dialog Proiect nou, selectați nodul LightSwitch și apoi selectați Biblioteca modulului LightSwitch (Visual Basic) sau Biblioteca modulului LightSwitch (c #).

În câmpul Nume. tip ShellExtension ca nume de bibliotecă extensie.

Faceți clic pe OK pentru a crea o soluție care conține 7 proiecte care sunt necesare pentru extensie.

Selectați tipul de extensie

În Solution Explorer, selectați proiectul ShellExtension.Lspkg.

Din meniul principal, selectați Proiect. Adăugarea unui element nou.

În caseta de dialog Adăugați un nou element, faceți clic pe Shell (Shell).

În câmpul Nume. tip ShellSample ca nume pentru modulul respectiv.

Faceți clic pe OK. Fișierele vor fi adăugate la mai multe proiecte din soluție.

Datele specificate în identificatorul atributului Shell pentru coajă. Valoarea trebuie să aibă următoarea formă: :. Numele modulului este definit în fișierul module.lsml care descrie modulul. Acest fișier și numele modulului sunt create de șablonul de proiect. Numele shell-ului definit în fișierul de proiect .lsml care descrie shell-ul. Interfața IShell are două metode: una care returnează numele de coajă echivalentă cu valoarea specificată în atributul Shell și unul care se întoarce în Uri XAML, resurse încorporate în ansamblul creat.

La dezvoltarea unei extensii de shell pentru LightSwitch există libertatea de a crea și de a folosi toate comenzile care asigură interoperabilitatea. Conținutul fiecărei aplicații LightSwitch constă dintr-un set de părți cunoscute. Următorul tabel prezintă părțile specificate ale aplicației LightSwitch.

Când creați un shell, trebuie să implementați multe elemente de funcționalitate și trebuie să utilizați mai multe sisteme la timpul de rulare al LightSwitch. Primul pas este actualizarea implementării implicite a shell-ului în fișier cu codul selectat.

Actualizați implementarea shell implicită

Șablonul shell furnizează un punct de pornire pentru crearea extensiei de shell. Este necesar să se implementeze "în implementarea de bază pentru a defini o funcție pe care shell-ul o oferă.

Actualizați implementarea shell-ului

În Solution Explorer, în proiectul ShellExtension.Client, faceți clic pe Vizualizare. shell folder. apoi deschideți fișierul ShellSample.xaml.vb sau ShellSample.xaml.cs.

Înlocuiți Importurile sau utilizând codul următor.

Înlocuiți codul în Presentation.Shells (Visual Basic) sau ShellExtension.Presentation.Shells namespace (c #) cu următorul cod.

Limba XAML specifică faptul că contextul pentru modelul de control TreeView date instalate în reprezentarea specificată Default.NavigationViewModel valoare prin specificarea-l ca ComponentViewModelService de valoare. Interfața INavigationViewModel are o proprietate numită NavigationItems. care returnează colecția de obiecte INavigationItem obiectul care urmează să fie monitorizat. Proprietatea ItemsSource a controlului TreeView este legată în această colecție.

Fiecare INavigationItem poate fi un INavigationScreen. care reprezintă un ecran care poate fi executat sau INavigationGroup. care reprezintă un container pentru alte obiecte INavigationItem. Prin urmare, șablonul pentru un control ierarhic de vizualizare legat de proprietatea Copii și de fiecare copil al unui simplu control TextBlock. unde proprietatea Text este atribuită proprietății DisplayName a obiectului INavigationItem. Este important să rețineți că secțiunile care nu pot fi executate de shell, de exemplu, ecrane parametrizate sau partiții la care utilizatorul nu are acces, vor filtra Filtrul NavigationViewModel.

Deschiderea ecranului

Când utilizatorul face dublu clic pe elementul de navigare al ecranului în panoul Panou de eșantionare, ecranul va fi deschis pe fila din setul de file. XAML limba pentru gestionarea TextBlock. care este folosit pentru a afișa fiecare element de navigare definește handler-ul pentru evenimentul MouseLeftButtonDown și în acest handler, că logica este ecranul de deschidere. Următorul segment de cod din clasa ShellSample adaugă un handler.

Contextul de date de control TextBlock este o instanță a interfeței INavigationItem. Dacă acest obiect poate fi difuzat cu succes într-o instanță a interfeței INavigationScreen. atunci ecranul trebuie afișat (funcționează). Proprietatea ExecutableObject din obiectul INavigationScreen conține o metodă numită ExecuteAsync. va determina timpul de funcționare al LightSwitch pentru a încărca ecranul. Când descărcați notificarea ScreenOpenedNotification, ecranul va fi afișat și ieșirea va fi numită handler.

Obiectul ScreenOpenedNotification oferă acces la instanțele de interfață IScreenObject și IScreenView. IScreenView. pe măsură ce obțineți controlul interfeței cu utilizatorul rădăcină pentru ecran. Elementele de coajă acceptă un astfel de control și îl fixează ca fiind conținutul elementului tab. Multe API rulare utilizează IScreenObject în nici un fel și ar fi efectuat sensul că este date de context pentru un control pentru care ecranul fila element al interfeței grafice în această probă. Cu toate acestea IScreenObject lipsesc mai multe piese cheie de funcționalitate, astfel încât eșantionul include MyScreenObject numit de clasă ajutătoare, care oferă această funcționalitate și, prin urmare, este utilizat ca contextul de date pentru elementul tab.







Crearea clasei MyScreenObject

În Solution Explorer, deschideți meniul de comenzi rapide pentru Vizualizare. și selectați Adăugați. Class.

În câmpul Nume, tastați MyScreenObject. apoi faceți clic pe Adăugare.

Înlocuiți conținutul clasei cu următorul cod.

Odată ce ecranul este deschis, este responsabilitatea shell-ului să țină evidența ecranului curent. Pentru a monitoriza ecranul curent, setați proprietatea curentă la ActiveScreensViewModel. Pentru a urmări ecranul care este deschis, această proprietate are o instanță IScreenObject. care tocmai a fost deschisă. Următorul segment de cod din clasa ShellSample urmărește ecranul deschis.

Interacțiunea ecranului de procesare

Odată ce ecranele sunt deschise, trebuie să configurați și interacțiunea cu utilizatorul, cum ar fi încheierea sau actualizarea sau comutarea între ecrane active. Notificările pentru sfârșitul ecranului și actualizarea ecranului includ IScreenObject. închide sau actualiza. Folosind contextul de date pentru control, ecranul găzduiește programul shell în jurul IScreenObject. MyScreenObject ar trebui să primească instanța principală a obiectului de pe ecran din instanța MyScreenObject comparativ cu obiectul ecranului, parte a argumentelor de notificare. Următorul cod primește propria instanță IScreenObject apelând proprietatea RealScreenObject pe MyScreenObject.

flux de lucru de bază, dacă închideți ecranul va șterge de control, care afișează un ecran care a închis și apoi setarea ecranul activ curent, care trebuie să fie una dintre celelalte ecrane care rămân deschise, dacă este deschis. În eșantion, ștergeți comanda pentru a găsi elementul tabular corespunzător și eliminați-l din părintele setului de file. Odată șters, trebuie să setați proprietatea curentă pe ActiveScreensViewModel la instanța principală a IScreenObject. care creează programul shell prin difuzarea instanței MyScreenObject ca context de date pentru noul element tabular selectat. Următorul segment de cod din clasa ShellSample gestionează încheierea ecranului.

Când actualizați ecranul, acesta este de fapt rupt și re-executat, ceea ce înseamnă că IScreenObject. ecranul este nou. Argumentele din notificarea ScreenReloadedNotification care conțin o instanță IScreenObject pentru instanța precedentă a ecranului. Acest lucru vă permite să găsiți controlul care se află pe ecranul original. După aceea, se găsește comanda, contextul de date trebuie să fie setat la un nou IScreenObject pentru noul ecran. O probă din acest lucru înseamnă că noul MyScreenObject ar trebui să fie create, ceea ce creează un nou înveliș IScreenObject și apoi plasat în contextul datelor pentru tipul de file element de control. Următorul segment de cod din clasa ShellSample se ocupă de actualizările ecranului.

Implementarea echipei

Carcasa eșantionului arată comenzile disponibile în bara de comandă din partea superioară a carcasei, care este doar un control al standardului Silverlight ListBox. Următorul fragment din fișierul ShellSample.xaml prezintă implementarea.

În limbajul XAML, rețineți legătura de date cu CommandsViewModel și diferitele sale proprietăți prin comenzile definite în șablon. Fiecare comandă din Listă este afișată folosind butonul. al cărui conținut este controlul și ImageBlock Image. Proprietatea IsEnabled a unui buton este legată de proprietatea ISEllCommand IsEnabled. iar proprietatea Text a blocului de text este setată la proprietatea DisplayName IShellCommand.

În modulul Handler pentru evenimentul clic pentru butonul. executați comanda prin extragerea proprietății ExecuteableObject în IShellCommand și apoi apelarea metodei ExecuteAsync. Următorul segment de cod din clasa ShellSample gestionează încheierea ecranului.

Modificarea și verificarea modificării datelor

În LightSwitch, fiecare dintre ele are o zonă proprie de date. Dacă s-au modificat date din această zonă, se va considera că ecranul era murdar. IScreenObject nu oferă o proprietate simplă dacă este "murdar". Prin urmare, trebuie să preluați aceste informații de la serviciul de date care furnizează date în zona de lucru a ecranului. Pentru aceasta, trebuie să vă înregistrați pentru evenimentele PropertyChanged din fiecare serviciu de date. Fragmentele de cod din clasa MyScreenObject sunt următoarele, acest exemplu oferă un program shell pentru instanțele IScreenObject pentru a furniza această funcționalitate.

Managerul OnDataServicePropertyChanged verifică proprietatea HasChanges pe obiectul de date pentru serviciul de date, după cum urmează.

Pentru a specifica o eroare de validare pentru ecran, trebuie mai întâi să determinați dacă există erori de validare. Cum se face această definiție ca o modalitate de a determina dacă un ecran murdar este faptul că IScreenObject nu oferă o proprietate simplă care asigură această stare. Un obiect de informații de pe ecran care conține rezultatele verificării și ale acestui set de rezultate când se modifică PropertyChanged pentru a activa notificarea. Prin urmare, este necesar să se înregistreze numai pentru această notificare. Fragmentele de cod din clasa MyScreenObject sunt după cum urmează.

Afișează utilizatorul curent

În cazul în care autentificarea este activată în aplicația LightSwitch, ar fi util ca shell-ul utilizatorilor să afișeze numele de utilizator pe care îl utilizează în prezent aplicația. Carcasa eșantionului afișează aceste informații în colțul din stânga jos. Dacă autentificarea nu este activată, valoarea nu se activează, valoarea este "Autentificare". Următorul exemplu este un fragment din fișierul ShellSample.xaml care definește comenzile care afișează aceste informații.

Datele utilizatorului actual vor fi disponibile din modelul de vizualizare CurrentUserViewModel. Un bloc de text care afișează numele utilizatorului curent este legat de proprietatea CurrentUserDisplayName din acest model de vizualizare.

Numele și descrierea pentru shell sunt definite în fișierul ShellSample.lsml; valori implicite ShellSample »Descriere« și «ShellSample». Accesul la ele este oferit utilizatorului acestei cochilii în aplicația Builder de aplicații. Prin urmare, este necesar să se schimbe atât la unul mai semnificativ.

Actualizați numele și descrierea

În soluția Explorer, selectați proiectul ShellExtension.Common.

Extindeți nodul Metadate și Shells și deschideți fișierul ShellSample.lsml.

În elementul Shell.Attributes, înlocuiți valorile DisplayName și Description, după cum urmează.

Aveți posibilitatea să testați extensiile de tip cont într-o instanță experimentală a Visual Studio. Dacă nu ați testat încă un proiect de extensibilitate LightSwitch, trebuie să activați instanța experimentală mai devreme.

Activați instanța experimentală

În Solution Explorer, selectați proiectul ShellExtension.Vsix.

În bara de meniu, faceți clic pe Proiect. proprietatea ShellExtension.Vsix.

În fila Debug, în secțiunea Acțiune la pornire, selectați Executare program extern.

Introduceți calea către fișierul executabil Visual Studio, devenv.exe.

Calea de sistem implicită 32 este C: \ Program Files \ Microsoft Visual Studio 11.0 \ Common7 \ ide \ devenv.exe. Sistem pe 64 de biți pe 64, fișier C: \ Program (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ ide \ devenv.exe.

în câmpul argumentele liniei de comandă. tip / rootsuffix Exp.

Toate proiectele ulterioare de extensibilitate LightSwitch vor folosi de asemenea această opțiune, apoi implicit.

Testarea cochiliei

În bara de meniu, faceți clic pe Debug. Începeți depanarea. Se deschide instanța experimentală a Visual Studio.

În instanța experimentală, în bara de meniu, faceți clic pe Fișier. Deschideți proiectul.

În caseta de dialog Deschidere proiect. Selectați orice proiect de aplicație LightSwitch existent, apoi faceți clic pe OK.

În bara de meniu, faceți clic pe Proiect. Numele proprietăților proiectului.

În Designer de Proiect, faceți clic pe fila Extensii, selectați caseta de selectare ShellExtension.

Faceți clic pe fila Proprietăți generale, iar în lista Shell, faceți clic pe My skin sample.

În bara de meniu, faceți clic pe Debug. Începeți depanarea.

Rețineți că în mod prestabilit nu există nici un ecran și trebuie să faceți dublu clic pe elementul din panoul Tranziții pentru a deschide ecranul.

Acest ghid pas cu pas. extensia shell are acum o extensie a carcasei, complet, difuzorul poate fi refolosit în orice proiect LightSwitch. Acesta a fost doar un exemplu de extindere a coajelor; puteți crea o coajă care diferă semnificativ în extensii la funcționalitate sau structură. Aceleași pași și principii de bază se aplică oricărei extensii a cochiliei, dar alte concepte care se aplică în alte situații.

Dacă intenționați să distribuiți extensia, atunci perechile sunt mai mult pe care doriți să le executați. Pentru a verifica dacă informațiile afișate pentru un anumit modul din proiectantul proiectului și din managerul de extensii sunt corecte, trebuie să actualizați proprietățile pentru pachetul VSIX. Pentru mai multe informații, consultați Cum se face. Specificați proprietățile pachetului VSIX. În plus, dacă intenționați să distribuiți soluția în mod deschis, există mai mulți factori care trebuie luați în considerare. Pentru mai multe informații, consultați Cum se face. Distribuirea extensiei LightSwitch.







Articole similare

Trimiteți-le prietenilor: