Archive

Archive for the ‘Windows Phone 7’ Category

Livre gratuit pour développer sous Windows Phone avec Silverlight

Le site WindowsPhoneGeek a publié gratuitement un livre en anglais parlant du développement Silverlight pour Windows Phone. Il s’agit d’un e-book de 22 chapitres repartis sur 246 pages parlant du SDK Windows Phone 7.1 Mango et du toolkit d’Août 2011. Le livre peut être téléchargé ici.
Bonne lecture 😉

Catégories :Windows Phone 7

WP7 ListPicker dans un ScrollViewer entraîne un bug

Le contrôle ComboBox n’existant pas sous Windows Phone 7 alors je me suis rabattu sur le contrôle ListPicker du toolkit Silverlight pour Windows Phone datant du mois d’août 2011. A ma grande surprise j’ai constaté que si l’on met un ListPicker à l’intérieur d’un ScrollViewer, ce contrôle sera rempli avec les éléments voulus mais vous ne pourrez cependant pas sélectionner un item de la liste tout simplement parce que la liste ne se déploie pas que vous assigniez ExpansionAllowed ou FullScreenOnly pour la propriété ExpansionMode. Une petite recherche m’a mené ici et pour pallier à ce problème voici la solution proposée :

public bool isListPickerClosed = true;

private void ListPicker_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
	ListPicker lp = (ListPicker)sender;

	if (isListPickerClosed)
	{
		if (lp.ListPickerMode == ListPickerMode.Normal)
			lp.ListPickerMode = lp.ListPickerMode;

		isListPickerClosed = false;
	}
	else
	{
		isListPickerClosed = true;
	}
}  

Cette solution pourtant qui devrait marcher ne marche pas parce que VS nous indique que la propriété ListPickerMode est en lecture seule ce qu’on ne comprend pas vu que la documentation indique la phrase suivante « Gets or sets the ListPickerMode (Ex:Normal/Expand/Full) ». Cette documentation indique bien qu’on peut modifier cette propriété alors qu’en réalité il est impossible. Pour résoudre ce problème il faut faire appel à la méthode Open() du ListPicker à la place de l’assignation de la propriété ListPickerMode (correction que j’ai proposée dans la même discussion dans ce forum ici) ce qui donne le résultat suivant :

public bool isListPickerClosed = true;

private void ListPicker_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
	ListPicker lp = (ListPicker)sender;

	if (isListPickerClosed)
	{
		if (lp.ListPickerMode == ListPickerMode.Normal)
			lp.Open();

		isListPickerClosed = false;
	}
	else
	{
		isListPickerClosed = true;
	}
}  

Nota Béné : Cette solution n’est que temporaire parce que je pense que le bug sera bientôt corrigé par les auteurs du toolkit.

Catégories :Windows Phone 7 Étiquettes : ,

WP7 – Faîtes attention à la méthode utilisée pour formater votre DataBinding !

Je me suis mis au développement sous la plateforme Windows Phone 7 en codant une petite application que je mettrai bientôt sur le Marketplace donc comme on dit en anglais « stay tuned! ».

Au cours du développement, j’ai énormément utilisé le Databinding (normal vu que j’utilise aussi le pattern MVVM) et si vous ne l’avez pas remarquée, le DataBinding propose une propriété StringFormat qui permet de formater le résultat issu du binding. Je peux citer comme exemple le fait de formater une date. C’est au sujet du formatage du binding que j’ai fait ce billet parce qu’à ma grande surprise une méthode que j’utilisais pour spécifier le format d’une date et qui marchait sous WPF et Silverlight (Application Web RIA) ne marche pas sous Windows Phone alors qu’on utilise Silverlight pour développer sous cette plateforme.
En WPF et Silverlight pour formater une date pour avoir seuls le jour, le mois et l’année sans l’heure dans l’affichage on a les trois méthodes suivantes :

1ère méthode :

<!-- Les deux premiers accolades {} avant le format sont là pour spécifier au moteur XAML 
de ne pas prendre en compte les accolades qui suivront juste après. --> 
<TextBlock Foreground="Red"
   FontSize="50"
   Text="{Binding Path=Date, StringFormat={}{0:dd/MM/yyyy}}" />

2ème méthode :

<!-- On utilise le '\' pour échapper les accolades qui sont dans le format --> 
<TextBlock Foreground="Red"
   FontSize="50"
   Text="{Binding Path=Date, StringFormat=\{0:dd/MM/yyyy\}}" />

3ème méthode :

<!-- On met juste le format pour en prenant soin de l'entourer avec des quotes simples --> 
<TextBlock Foreground="Red"
   FontSize="50"
   Text="{Binding Path=Date, StringFormat='dd/MM/yyyy'}" />

Cool ! Nous avons 3 méthodes qui nous permettent de faire ce qu’on veut. La méthode que je préfère c’est la première (les goûts ne se discutent pas !). Donc c’est normal que je l’ai utilisée dans mon application Windows Phone 7. En design mode tout est correct, la date s’affiche dans le format voulu mais lorsqu’on compile l’application le compilateur nous renvoie l’erreur suivante :

Erreur binding lors de la compilation

Pensant avoir affaire à un format mal effectué mais il se trouve que non. La première méthode, qui elle marche avec WPF et Sivleright RIA, ne marche pas sous Windows Phone 7 ou ne marche qu’en Design Mode. Pour corriger cela il faudra passer par l’une des deux dernières méthodes citées précédemment.

j’espère que ce billet vous a appris quelque chose et vous fera gagner du temps vu que moi j’en ai perdu pas moins de 30mn avant de le savoir parce que j’étais sûr à 100% que mon format était correct SOUS WINDOWS PHONE 7 et surtout qu’en design mode l’affichage correspondait à ce que j’attendais 🙂 .

Nota Béné : Mon application a été codée avec la version RC du SDK Windows Phone 7 – Mango donc il se peut ce petit bug soit corrigé dans les versions futures.

Catégories :Windows Phone 7 Étiquettes : , ,
%d blogueurs aiment cette page :