Ajouter une SystemTray dans une app Silverlight+XNA pour WP

J’ai développé ces derniers temps plusieurs projets utilisant Silverlight+XNA.

L’utilisation d’un écran XNA au sein d’une application Silverlight est, pour certain projet, un véritable plus puisqu’elle permet d’allier la puissance graphique de XNA avec la simplicité d’utilisation de Silverlight notamment dans la gestion de contrôles complexes nécessaire aux paramètres de l’application.

Ma dernière réalisation nécessitait, dans ce contexte, l’utilisation de la SystemTray, c’est à dire l’affichage de la barre contenant la charge de la batterie et d’autres informations comme la qualité de la liaison par exemple.

Une SystemTray sur notre écran XNA

J’ai donc ajouté dans la page XAML chargée d’accueillir l’écran XNA la propriété SystemTray.IsVisible :

<phone:PhoneApplicationPage 
    ...
    
    shell:SystemTray.IsVisible="True"
    >
    
    <!--No XAML content is required as the page is rendered entirely with the XNA Framework-->

</phone:PhoneApplicationPage>

Malheureusement dès que l’écran XNA est lancé on constate un bug étrange.

La barre SystemTray apparait convenablement mais des bords de 20 pixels ont été ajoutés de chaque coté de l’écran.
De plus l’ecran est rétaillé en 460×768 au lieu des 480×800 attendu (32 pixels se decalant normalement vers le bas) ce qui donne un effet de flou à notre écran assez déplaisant.

L’Opacité à la rescousse

Afin de contrer ce drôle d’effet de bord et récupérer ces pixels perdues, on rajoute une opacité à notre SystemTray.

Si vous voulez que le fond de la barre soit visible une valeur de 0.99 est requise sinon une valeur à 0 permettra une intégration plus poussée (car pas de fond).
Dans tous les cas il faudra prévoir que les 32 pixels de votre écran XNA ne seront pas visibles car il n’y a pas de décalage de l’écran due à l’opacité de la barre différente de 1.

>
<phone:PhoneApplicationPage 
    ...
    
    shell:SystemTray.Opacity="0.99"
    shell:SystemTray.IsVisible="True"
    >
    
    <!--No XAML content is required as the page is rendered entirely with the XNA Framework-->


</phone:PhoneApplicationPage>

On récupère finalement notre écran XNA aux bonnes dimensions sans l’effet de flou.
Il est possible qu’un effet similaire soit observable sur les applications XNA « pures » mais je n’ai pas vérifié.



Une réponse à Ajouter une SystemTray dans une app Silverlight+XNA pour WP

  1.  

leave your comment