Traduction▲
Ce tutoriel est la traduction la plus fidèle possible du tutoriel original de Peter Bull, Windows Phone 7 - Photo Viewer and Slideshow Application using Silverlight on Windows Phone 7.
Introduction▲
Slide Show est une visionneuse d'images sur Windows Phone 7 avec la possibilité de lancer ou mettre en pause un diaporama et comprenant des contrôles de lecture et de la vitesse.
Application visionneuse de photos et de diaporamas utilisant Silverlight sur Windows Phone 7▲
Étape 1▲
Démarrez Microsoft Visual Web Developer 2010 Express pour Windows Phone, ensuite sélectionnez Fichier puis Nouveau Projet… Sélectionnez Visual C# ensuite Silverlight for Windows Phone puis Application Windows Phone dans les modèles installés, sélectionnez un emplacement si vous le souhaitez, puis entrez un nom pour le projet et appuyez sur OK :
Étape 2▲
Une page Application Windows Phone nommée MainPage.xaml devrait alors apparaître :
Étape 3▲
Faites un clic droit sur le Projet dans l'Explorateur de solutions et choisissez Ajouter ensuite Nouveau dossier, et nommez-le « images » (sans les guillemets) :
Étape 4▲
Téléchargez les images suivantes (add.png, remove.png, play.png et stop.png) en faisant un clic droit sur les images ci-dessous et en choisissant « Enregistrer l'image sous… », puis enregistrez-les dans un dossier sur votre ordinateur :
add.png
remove.png
play.png
stop.png
Étape 5▲
Faites un clic droit sur le dossier « images » du Projet dans l'Explorateur de solutions, et choisissez Ajouter, ensuite Elément existant… Puis dans la fenêtre Ajouter un élément existant…, sélectionnez le dossier dans lequel vous avez enregistré les images, ensuite choisissez Ajouter pour ajouter add.png, remove.png, play.png et stop.png au dossier « images » dans le projet :
Étape 6▲
Puisque nous en sommes à l'Explorateur de solutions cliquez sur l'image « add.png », ensuite allez dans la boîte Propriétés et modifiez Action de génération à Contenu. Faites la même chose pour les images « play.png », « remove.png » et « stop.png » :
Étape 7▲
Sélectionnez le Projet SlideShow dans l'Explorateur de solutions, ensuite depuis le Menu sélectionnez Projet puis Ajouter une classe…, et sélectionnez le modèle Classe s'il ne l'est pas déjà. Ensuite, modifiez le Nom à SlideShow.cs :
Étape 8▲
Ajoutez la nouvelle classe au Projet en cliquant sur Ajouter, ensuite dans la vue de code pour la nouvelle Classe, au-dessus de namespace SlideShow tapez ceci :
using
System.
Collections.
Generic;
using
System.
Windows.
Threading;
using
System.
Windows.
Media.
Imaging;
using
System.
IO;
Également dans la vue de code, en dessous du « { » de la ligne public class SlideShow tapez ceci :
private
DispatcherTimer _slideshow =
new
DispatcherTimer
(
);
private
List<
BitmapImage>
_images =
new
List<
BitmapImage>(
);
private
int
_index;
private
bool
_hasImages;
private
bool
_isPlaying;
private
bool
_isPaused;
public
delegate
void
SlideEvent
(
BitmapImage image,
int
index);
public
event
SlideEvent Slide;
Étape 9▲
Puisque nous en sommes à la vue de code pour SlideShow.cs, en dessous de public event SlideEvent Slide; tapez le constructeur et les méthodes suivants :
public
SlideShow
(
)
{
_slideshow.
Interval =
TimeSpan.
FromSeconds
(
1
.
5
);
_slideshow.
Tick +=
new
EventHandler
(
SlideShow_Tick);
}
public
bool
Add
(
Uri uri)
{
BitmapImage _image =
new
BitmapImage
(
uri);
_images.
Add
(
_image);
return
_hasImages =
_images.
Count >
0
;
}
public
void
Remove
(
int
index)
{
if
(
index <
_images.
Count &&
index >
-
1
)
{
_images.
RemoveAt
(
index);
}
}
public
void
Play
(
)
{
if
(
_hasImages &&
(
_isPaused ||
!
_isPlaying))
{
_slideshow.
Start
(
);
_isPlaying =
true
;
_isPaused =
false
;
}
}
public
void
Pause
(
)
{
if
(
_hasImages &&
_isPlaying)
{
_slideshow.
Stop
(
);
_isPaused =
true
;
_isPlaying =
false
;
}
}
public
void
Stop
(
)
{
if
(
_hasImages)
{
_index =
0
;
_slideshow.
Stop
(
);
_isPaused =
false
;
_isPlaying =
false
;
}
}
public
void
Selected
(
int
index)
{
if
(
_hasImages &&
index <
_images.
Count)
{
_index =
index;
if
(
_isPlaying)
{
this
.
Play
(
);
}
}
}
Étape 10▲
En étant toujours dans la vue de code pour SlideShow.cs, au-dessus de public SlideShow tapez le gestionnaire d'événement et les propriétés suivants :
private
void
SlideShow_Tick
(
object
sender,
EventArgs e)
{
if
(
_hasImages &&
_isPlaying)
{
if
(
_index <
_images.
Count)
{
Slide
(
_images[
_index],
_index);
_index +=
1
;
}
else
{
this
.
Stop
(
);
}
}
}
public
TimeSpan Speed
{
get
{
return
_slideshow.
Interval;
}
set
{
if
(
value
!=
_slideshow.
Interval)
{
_slideshow.
Interval =
value
;
}
}
}
public
int
Position
{
get
{
return
_index;
}
set
{
_index =
value
;
}
}
public
int
Count
{
get
{
return
_images.
Count;
}
}
public
bool
Playing
{
get
{
return
_isPlaying;
}
}
public
bool
Paused
{
get
{
return
_isPaused;
}
}
Étape 11▲
Retournez au concepteur de vues MainPage en sélectionnant l'onglet MainPage.xaml, ensuite dans le volet XAML au-dessus de la balise <Grid> tapez le code XAML ApplicationBar suivant :
<
phone
:
PhoneApplicationPage.ApplicationBar>
<
shell
:
ApplicationBar
IsVisible
=
"True"
IsMenuEnabled
=
"False"
>
<
shell
:
ApplicationBar.Buttons>
<
shell
:
ApplicationBarIconButton
Text
=
"add"
IconUri
=
"/images/add.png"
Click
=
"Add_Click"
/>
<
shell
:
ApplicationBarIconButton
Text
=
"remove"
IconUri
=
"/images/remove.png"
Click
=
"Remove_Click"
/>
<
shell
:
ApplicationBarIconButton
Text
=
"play"
IconUri
=
"/images/play.png"
Click
=
"Play_Click"
/>
<
shell
:
ApplicationBarIconButton
Text
=
"stop"
IconUri
=
"/images/stop.png"
Click
=
"Stop_Click"
/>
</
shell
:
ApplicationBar.Buttons>
</
shell
:
ApplicationBar>
</
phone
:
PhoneApplicationPage.ApplicationBar>
Étape 12▲
Toujours dans le volet XAML, entre les lignes <Grid
x
:
Name
=
"ContentGrid"
Grid.
Row
=
"1"
>
et </Grid>
, tapez le code XAML suivant :
<Grid
x
:
Name
=
"ContentMain"
>
<Grid.RowDefinitions>
<RowDefinition
Height
=
"80"
/>
<RowDefinition
Height
=
"*"
/>
<RowDefinition
Height
=
"80"
/>
</Grid.RowDefinitions>
<Grid
x
:
Name
=
"Toolbar"
Grid.
Row
=
"0"
>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width
=
"*"
/>
<ColumnDefinition
Width
=
"Auto"
/>
</Grid.ColumnDefinitions>
<!-- Toolbar -->
</Grid>
<!-- Content -->
<Grid
x
:
Name
=
"Playback"
Grid.
Row
=
"2"
>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width
=
"*"
/>
<ColumnDefinition
Width
=
"120"
/>
</Grid.ColumnDefinitions>
<!-- Playback -->
</Grid>
</Grid>
XAML :
Design :
Étape 13▲
Puis dans la section Contrôles Windows Phone de la Boîte à outils, sélectionnez le contrôle TextBox :
Étape 14▲
Dessinez un TextBox sur la section barre d'outils (plus petite section supérieure) du Grid sur la page, en dessous du titre de la page, et dans le volet XAML en dessous de la ligne <!-- Toolbar -->, modifiez TextBox1 comme ceci :
<TextBox Grid.
Column
=
"0"
Name
=
"Location"
>
<TextBox.InputScope>
<InputScope>
<InputScopeName
NameValue
=
"Url"
/>
</InputScope>
</TextBox.InputScope>
</TextBox>
Voir ci-dessous :
Étape 15▲
Puis dans la section Contrôles Windows Phone de la Boîte à outils, sélectionnez le contrôle Button :
Étape 16▲
Dessinez un bouton sur la section barre d'outils en glissant le bouton de la Boîte à outils sur la section barre d'outils du Grid sur la page, ensuite dans le volet XAML modifiez la ligne Button1 comme ceci :
<Button Grid.
Column
=
"1"
Content
=
"go"
Click
=
"Go_Click"
/>
Voir ci-dessous :
Étape 17▲
Puis dans la section Contrôles Windows Phone de la Boîte à outils, sélectionnez le contrôle Slider :
Étape 18▲
Dessinez deux Sliders sur la section Playback (la plus petite section inférieure) du Grid sur la page, en glissant les Sliders de la Boîte à outils sur la section Playback de la page, ensuite dans le volet XAML modifiez les lignes <Slider> comme ceci :
<Slider Grid.
Column
=
"0"
Minimum
=
"0"
Name
=
"Position"
ValueChanged
=
"Position_ValueChanged"
/>
<Slider Grid.
Column
=
"1"
Minimum
=
"100"
Maximum
=
"5000"
Value
=
"1500"
Name
=
"Speed"
ValueChanged
=
"Speed_ValueChanged"
/>
Voir ci-dessous :
Étape 19▲
Puis dans la section Contrôles Windows Phone de la Boîte à outils, sélectionnez le contrôle Image :
Étape 20▲
Dessinez une Image sur la plus grande section du Grid sur la page (Content) en glissant une image sur la section Content de la page, ensuite dans le volet XAML modifiez la ligne <Image> comme ceci :
<Image Grid.
Row
=
"1"
Stretch
=
"Uniform"
Name
=
"Display"
/>
Voir ci-dessous :
Étape 21▲
Étant toujours dans le concepteur de vues pour MainPage.xaml, sélectionnez le TextBlock « nom de la page » (PageTitle), ensuite Supprimer ou faites un clic droit et choisissez l'option Supprimer pour que le MainPage.xaml apparaisse comme suit :
Étape 22▲
Faites un clic droit sur la page ou sur l'entrée pour MainPage.xaml dans l'Explorateur de solutions et choisissez l'option Afficher le code. Dans la vue de code, au-dessus de namespace SlideShow tapez ceci :
using
System.
Windows.
Media.
Imaging;
Également dans la vue de code, au-dessus de public MainPage() tapez les déclarations suivantes :
public
SlideShow SlideShow =
new
SlideShow
(
);
Étape 23▲
Puisque nous en sommes à la vue de code pour MainPage.xaml.cs, dans le constructeur public MainPage() en dessous de InitializeComponent(); tapez ceci :
ApplicationTitle.
Text =
"SLIDESHOW"
;
Location.
Text =
"http://"
;
SlideShow.
Slide +=
(
BitmapImage image,
int
index) =>
{
Display.
Source =
image;
Position.
Value =
index;
};
Étape 24▲
En étant toujours au niveau de la vue de code pour MainPage.xaml.cs, au-dessus de public MainPage(), tapez les gestionnaires d'événements suivants :
private
void
Go_Click
(
object
sender,
RoutedEventArgs e)
{
Display.
Source =
new
BitmapImage
(
new
Uri
(
Location.
Text));
}
private
void
Add_Click
(
object
sender,
EventArgs e)
{
SlideShow.
Add
(
new
Uri
(
Location.
Text));
Position.
Maximum =
SlideShow.
Count -
1
;
}
private
void
Remove_Click
(
object
sender,
EventArgs e)
{
SlideShow.
Remove
((
int
)Position.
Value);
Position.
Maximum =
SlideShow.
Count -
1
;
}
private
void
Play_Click
(
object
sender,
EventArgs e)
{
if
(
SlideShow.
Playing)
{
if
(
SlideShow.
Paused)
{
SlideShow.
Play
(
);
}
else
{
SlideShow.
Pause
(
);
}
}
else
{
SlideShow.
Play
(
);
}
}
private
void
Stop_Click
(
object
sender,
EventArgs e)
{
SlideShow.
Stop
(
);
}
private
void
Position_ValueChanged
(
object
sender,
RoutedPropertyChangedEventArgs<
double
>
e)
{
SlideShow.
Position =
(
int
)Position.
Value;
}
private
void
Speed_ValueChanged
(
object
sender,
RoutedPropertyChangedEventArgs<
double
>
e)
{
if
(
Speed !=
null
)
{
SlideShow.
Speed =
TimeSpan.
FromMilliseconds
(
Speed.
Value);
}
}
Étape 25▲
Enregistrez le Projet maintenant que vous avez terminé l'application Windows Phone Silverlight. Sélectionnez l'option Windows Phone Emulator, ensuite sélectionnez Debug puis Démarrer le débogage ou cliquez sur Démarrer le débogage :
Dès que vous l'aurez fait, ce qui suit apparaîtra dans l'émulateur Windows Phone une fois chargé :
Étape 26▲
Appuyez sur le TextBox et saisissez l'adresse web d'une image telle que celle-ci, ensuite cliquez sur le bouton go. Une fois chargée vous pouvez l'ajouter au SlideShow avec le bouton « + ». Vous pouvez ajouter plusieurs images pour monter un diaporama :
Étape 27▲
Vous pouvez ensuite Arrêter l'application en sélectionnant la fenêtre d'application Visual Studio 2010 et en cliquant sur le bouton Arrêter le débogage :
Conclusion▲
Ceci est une application de diaporama simple. Vous pouvez continuer à ajouter des images ou, sinon, supprimer une image que vous avez sélectionnée avec le bouton « - ». Vous pouvez essayer d'ajouter vos propres fonctionnalités telles que des animations et des transitions entre les images - personnalisez-la !
Liens▲
Remerciements▲
Je tiens ici à remercier Peter Bull de m'avoir autorisé à traduire son tutoriel.
Je remercie tomlev pour sa relecture technique et ses propositions.
Je remercie également FirePrawn pour sa relecture orthographique et ses propositions.