Technology Experience
.NET World

[Flickr.2] Startup dell’applicazione in WPF

Per questo primo esperimento, non ho grandi pretese. Voglio un’applicazione Windows che si connetta a Flickr e che permetta di sfogliare i sets di un certo utente, con tutte le sue foto. Il tutto in WPF, ovviamente. I concetti base li abbiamo visti ieri nel precedente post.

Il progetto che ho costruito fino ad adesso comprende due sole Window: MainWindow (la window principale dell’applicazione) e WaitingWindow (la window che appare all’avvio per autenticare l’applicazione). Il file app.xaml è definito nel modo seguente:

<Application x:Class="FlickrBrowser.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml"> </Application>

Non ci sono risorse a livello applicazione, ed inoltre si deduce che la window che parte è proprio la MainWindow.
Il costruttore di tale classe è molto semplice:

public MainWindow() { InitializeComponent(); authenticate(); }

Il metodo privato authenticate() apre una seconda Window, che esamineremo adesso. Lo scopo di questa window è quello di fare tutto quello che abbiamo detto la volta scorsa, ovvero: connettersi a Flickr, richiedere un frob, apre il browser per autenticare l’applicazione e dare il consenso. Roba già dette, insomma.

La window WaitingWindow
Questa window appare all’avvio e ci mostra due Button: il primo apre un browser ad un certo url, il secondo accede a Flickr con le credenziali che sono state autorizzate. Lo XAML che definisce la window è:

<Window x:Class="FlickrBrowser.WaitingWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:b="clr-namespace:FlickrBrowser" Title="Permission" Width="260" Height="138" WindowStartupLocation="CenterScreen" ResizeMode="NoResize"> <StackPanel Orientation="Vertical"> <b:FlickrButton Width="240" Margin="6" x:Name="openBrowserButton" Height="40"> <Button.Content> <TextBlock HorizontalAlignment="Center" Text="Open the browser!"> </TextBlock> </Button.Content> </b:FlickrButton> <b:FlickrButton Width="240" Margin="6" x:Name="closeWindowButton" Height="40" IsEnabled="False"> <Button.Content> <TextBlock HorizontalAlignment="Center" Text="Ok, I've authenticated this application!"> </TextBlock> </Button.Content> </b:FlickrButton> </StackPanel> </Window>

C’è uno StackPanel verticale e due Button. I Button non sono quelli classici di WPF, ma sono FlickrButton: una classe che eredita da Button ma ne specifica alcuni comportamenti. Non ci interessa in questo momento capire il perchè ed il percome: ci basti sapere che funzionano esattamente come due normalissimi Button. Per inserirli nello XAML, ho dovuto inserire un riferimento all’assembly FlickrBrowser, identificandolo con il prefisso b. Il costruttore della WaitingWindow è il seguente:

public WaitingWindow() { InitializeComponent(); conn = new Flickr(apiKey, secretKey); openBrowserButton.Click += new RoutedEventHandler(openBrowserButton_Click); closeWindowButton.Click += new RoutedEventHandler(closeWindowButton_Click); }

Ovvero: si connette a Flickr usando api key e secret key ed associa due event-handler ai due pulsanti (avrei potuto ovviamente farlo nello XAML – non so perchè mi è uscito così). Il primo event-handler è il seguente:

void openBrowserButton_Click(object sender, RoutedEventArgs e) { frob = conn.AuthGetFrob(); // Richiesta di autenticazione a flickr.com string loginLink = conn.AuthCalcUrl(frob, AuthLevel.Write); System.Diagnostics.Process.Start(loginLink); openBrowserButton.IsEnabled = false; closeWindowButton.IsEnabled = true; }

Ovvero: dalla connessione ottengo il frob, apro il browser e disabilito opportunamente il bottone, in modo tale che l’utente possa cliccare sull’altro. Il secondo event-handler è il seguente:

void closeWindowButton_Click(object sender, RoutedEventArgs e) { // Dopo aver autenticato l'applicazione Auth auth = conn.AuthGetToken(frob); token = auth.Token; // Mi loggo a flickr.com con l'account conn = new Flickr(apiKey, sharedKey, token); this.Close(); }

Ovvero: mi connetto a Flickr con il token che consente autorizzazioni più elevate rispetto a prima e poi, molto semplicemente, la window viene chiusa.

L’esecuzione continua sull’altra window, MainWindow: ne parleremo più nel dettaglio la prossima volta.

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.