Je fais mes premiers pas dans Silverlight en m'appuyant sur ce TP. Ma première opinion est que Expression dispose d'une interface très moderne. En suivant précisément le TP, je m'aperçois que fondamentalement, il n'y a rien de bien compliqué. Tout est clair, Silverlight s'appuie sur de l'XAML (eXtensible Application Markup Language). On génère aisément des "StoryBoard" ou effets de transition qu'on applique aussi facilement à un évènement :
voici le code XAML de la transition générée par Expression Blend :
<Storyboard x:Name="fadeOutPlayButton">
<DoubleAnimationUsingKeyFrames
BeginTime="00:00:00"
Storyboard.TargetName="playButton"
Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0.9"/>
<SplineDoubleKeyFrame KeyTime="00:00:01" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
Ce StoryBoard va être inclus dans une fonction JavaScript qui est complètement personnalisable.
function mediaelement_play(sender, args) {
sender.findName("mediaElt").play();
sender.findName("fadeOutPlayButton").begin();
sender.findName("pauseButton").Opacity = 0.85;
}
et lorsqu'on reçoit l'évènement clic de souris il suffit alors de spécifier l'action voulue, pour celà il faut rajouter l'attribut MouseLeftButtonDown
retour à l'XAML :
<Canvas x:Name="playButton" Width="66.955" Height="36.271" Canvas.Top="251.729" Canvas.Left="313.045"
MouseLeftButtonDown="mediaelement_play" >
<Rectangle Width="60" Height="30" Fill="#FF9B2C2C" RadiusY="10.5" RadiusX="10.5" Opacity="0.43"
Canvas.Top="2.361" Canvas.Left="3.148"/>
<Polygon Points="0,0 0,24 24,12" Opacity="0.70" Fill="#FF000000" Canvas.Top="5.509" Canvas.Left="23.61" />
<Rectangle Width="66.334" Height="34.668" Opacity="0.68" RadiusX="10.5" RadiusY="10.5">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF000000" Offset="0"/>
<GradientStop Color="#FFD82020" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
</Canvas>
Ainsi lorsque le "playButton" recevra un clic gauche de la souris, la fonction "mediaelement_play" sera exécutée et la suite d'évènements spécifiés sera déclenchée :
sender.findName("mediaElt").play();
l'objet "mediaElt" reçoit l'ordre de mise en lecture (ici notre video au format wmv)
sender.findName("fadeOutPlayButton").begin();
l'objet "fadeOutPlayButton" (notre storyboard) reçoit l'ordre de s'exécuter.
sender.findName("pauseButton").Opacity = 0.85;
puis on change l'opacité de l'objet "pauseButton" à 0.85
aussi simple que celà. => le résultat
Aussi, Silverlight se dit multi-plateforme, j'ai testé et effectivement ma page se lance sur Firefox et sur Safari en ayant préalablement installé le plugin Silverlight.
Ce format est tant ouvert, on peut alors se demander si il est possible de faire communiquer des applications Java avec des interfaces Silverlight.
Reprenons, Expression Blend m'a généré plusieurs fichiers, parmi eux, de l'XAML et du JavaScript,
une petite recherche permet d'affirmer qu'il est possible de faire communiquer du Java et du JavaScript.
Imaginez les possibilités : exploitez votre modèle métier avec une interface Silverlight, vous aurez l'avantage de disposer de la richesse graphique de Silverlight tout en conservant vos Frameworks Java.
Des travaux d'intégration ont déjà débuté, je vous invite à visiter ce site.
Une peau neuve pour Java ?
(En attendant JavaFx...)