Archive

Archive for the ‘Windows Phone 7’ Category

[Promo] : Bordeaux onLive v1.2

Petit article pour vous parler de la sortie de la mise ajour 1.2 de l’application Bordeaux onLive sur WP7 !

Plus d’informations sur  : http://www.bordeaux-onlive.com

Nouvelles fonctionnalités

  • Ajout de la possibilité d’épingler le trafic de la rocade sur l’écran d’accueil
  • Ajout de l’aperçu de la rocade sur la tuile
  • Ajout du trafic intérieur de la rocade
  • Ajout de la fonctionnalité TBC tant demandée !
  • Ajout de la liste des lignes de Bus
  • Ajout de la liste des lignes de Tramways
  • Ajout de la liste des terminus d’une ligne
  • Ajout de la liste des arrêts d’une ligne de Bus / Tram
  • Ajout de la liste des prochains passages théoriques d’un Bus / Tram à un arrêt
  • Ajout du détail du trajet avec horaires théoriques jusqu’à la fin

Screenshots

                

Disponible gratuitement sur le marketplace

download

Publicités

[Promo] : Sortie de U-Telemarket sur WP7

Petit article afin de vous faire partager une petite application que j’ai pu développer.

L’application U-Telemarket vous permet à tout moment de faire vos courses et de vous faire livrer chez vous, à l’heure qui vous convient !

Avec l’application U Telemarket.fr vous pouvez désormais :

-Créer ou rattacher votre compte sur votre mobile,
-Accéder directement aux promotions du jour,
-Faire vos courses par rayons et sous-rayons,
-Afficher chaque fiche produit et choisir la quantité à ajouter à votre panier,
-Valider votre panier : liste des produits et quantités choisies,
-Sélectionner votre adresse de facturation et une ou plusieurs adresses de livraison,
-Choisir votre créneau de livraison,
-Régler en direct de vos achats,
-Recevoir votre récapitulatif directement sur votre mobile.

download

Catégories :Windows Phone 7

[Promo] : Sortie de Bordeaux onLive sur WP7

Petit article pour vous parler de l’application Bordeaux onLive que je viens de sortir sur WP7 et que vous pouvez dès à présent trouver sur le marketplace !

flyer-bordeaux-onlive-wp7-windows-phone-7

Retrouvez gratuitement toutes les informations officielles de la CUB et bien plus encore grace à l’application Bordeaux onLive disponible sur Windows Phone 7!

L’essentiel VCub

Elle aidera à vous déplacer entre chaque station du VCub et faire le bon choix selon les disponibilités des cycles et des emplacements.

Trafic de la rocade en temps réel

Cette fonctionnalité vous permettra de gérer au mieux vos trajets en voiture.

Informations sur les parking publics et parc relais

Les informations sur les parkings et parcs relais de bordeaux vous permettront de garer votre véhicule en toute tranquilité et de gérer au mieux vos itinéraires.

 

Plus d’informations sur le site web associé : bordeaux-onlive

ou tout simplement sur le marketplace

download

 

MAJ du 12/02/2012

  • Fixed Correction de bugs.
  • New Localisation de l’application en Anglais, Français et Italien.
  • New Liste des parkings publics avec le nombre de places disponibles.
  • New Détails d’un parking public.
  • New Liste des parcs relais.
  • New Détails d’un parc relais avec la capacité voiture, 2 roues, handicapés et électrique.
  • New Possibilité de désactiver la fonction de localisation dans l’application (paramètres).

[WP7] : TextBox avec une indication visuelle (Watermark)

Nous allons voir aujourd’hui comment faire une TextBox contenant une indication visuelle pour l’utilisateur en Windows Phone 7, tout cela de la façon la plus simple possible.

Ce type de TextBox existe un peu partout dans le système mais n’est pas proposé nativement dans le kit de développement.

WP7-BingSearch

Nous verrons plus tard comment améliorer tout ça 🙂

Pour cela :

Création du composant

  • Créez un projet WP7
  • Ajoutez une classe « TextBoxInfo.cs » et ajoutez le squelette suivant :
/// <summary>
	/// TextBox permettant d'afficher une indication à l'utilisateur
	/// </summary>
	public class TextBoxInfo : TextBox
	{
		#region Constructeurs
		/// <summary>
		/// Initialise une nouvelle instance de la TextBox permettant d'afficher une indication à l'utilisateur
		/// </summary>
		public TextBoxInfo()
		{
			DefaultStyleKey = typeof(TextBoxInfo);
		}
		#endregion
	}
  • Ajoutez un TemplatePart correspondant à l’emplacement que nous utiliserons pour l’indication visuelle
/// <summary>
	/// TextBox permettant d'afficher une indication à l'utilisateur
	/// </summary>
	[TemplatePart(Name = "WatermarkContentElement", Type = typeof(FrameworkElement))]
	public class TextBoxInfo : TextBox
	{
  • Ajoutez une DP et son wrapper permettant de définir le contenu de l’indication visuelle
/// <summary>
	/// TextBox permettant d'afficher une indication à l'utilisateur
	/// </summary>
	[TemplatePart(Name = "WatermarkContentElement", Type = typeof(FrameworkElement))]
	public class TextBoxInfo : TextBox
	{
		#region DPs
		/// <summary>
		/// Définit la DP permettant de mentionner le contenu à afficher pour l'indication dans la TextBox
		/// </summary>
		public static readonly DependencyProperty WatermarkContentProperty = DependencyProperty.Register("WatermarkContent", typeof(Object), typeof(TextBoxInfo), new PropertyMetadata(OnWatermarkPropertyChanged));

		#endregion

		#region Constructeurs
		/// <summary>
		/// Initialise une nouvelle instance de la TextBox permettant d'afficher une indication à l'utilisateur
		/// </summary>
		public TextBoxInfo()
		{
			DefaultStyleKey = typeof(TextBoxInfo);
		}
		#endregion

		#region Propriétées
		/// <summary>
		/// Obtient ou définit l'indication visuelle à afficher
		/// </summary>
		public Object WatermarkContent
		{
			get
			{
				return GetValue(WatermarkContentProperty) as Object;
			}
			set
			{
				SetValue(WatermarkContentProperty, value);
			}
		}
		#endregion

	}
  • Maintenant redéfinissez la méthode OnApplyTemplate appelée avant l’affichage du composant

Nous récupérons le TemplatePart et le gardons en membre privé.

/// <summary>
	/// TextBox permettant d'afficher une indication à l'utilisateur
	/// </summary>
	[TemplatePart(Name = "WatermarkContentElement", Type = typeof(FrameworkElement))]
	public class TextBoxInfo : TextBox
	{
		#region Membres
		private ContentControl _watermarkContent;
		#endregion
		...
		/// <summary>
		/// Appelé juste avant d'être affiché à l'écran
		/// </summary>
		public override void OnApplyTemplate()
		{
			base.OnApplyTemplate();

			_watermarkContent = GetTemplateChild("WatermarkContentElement") as ContentControl;

			if (_watermarkContent != null)
				ComputeWatermarkContentVisibility();
		}
		...
}
  • Pour terminer redéfinissez les méthodes OnGotFocus et OnLostFocus

Nous faisons ici la logique d’affichage et masquage de l’indication visuelle en fonction du texte saisi par l’utilisateur et du Focus.

/// <summary>
	/// TextBox permettant d'afficher une indication à l'utilisateur
	/// </summary>
	[TemplatePart(Name = "WatermarkContentElement", Type = typeof(FrameworkElement))]
	public class TextBoxInfo : TextBox
	{
		#region Membres
		private ContentControl _watermarkContent;
		#endregion

		#region DPs
		/// <summary>
		/// Définit la DP permettant de mentionner le contenu à afficher pour l'indication dans la TextBox
		/// </summary>
		public static readonly DependencyProperty WatermarkContentProperty = DependencyProperty.Register("WatermarkContent", typeof(Object), typeof(TextBoxInfo), new PropertyMetadata(OnWatermarkPropertyChanged));

		#endregion

		#region Constructeurs
		/// <summary>
		/// Initialise une nouvelle instance de la TextBox permettant d'afficher une indication à l'utilisateur
		/// </summary>
		public TextBoxInfo()
		{
			DefaultStyleKey = typeof(TextBoxInfo);
		}
		#endregion

		#region Propriétées
		/// <summary>
		/// Obtient ou définit l'indication visuelle à afficher
		/// </summary>
		public Object WatermarkContent
		{
			get
			{
				return GetValue(WatermarkContentProperty) as Object;
			}
			set
			{
				SetValue(WatermarkContentProperty, value);
			}
		}
		#endregion

		#region Méthodes
		private void ComputeWatermarkContentVisibility()
		{
			if (_watermarkContent != null)
				_watermarkContent.Visibility = String.IsNullOrEmpty(this.Text) ? Visibility.Visible : Visibility.Collapsed;
		}
		#endregion

		#region Handlers
		/// <summary>
		/// Appelé juste avant d'être affiché à l'écran
		/// </summary>
		public override void OnApplyTemplate()
		{
			base.OnApplyTemplate();

			_watermarkContent = GetTemplateChild("WatermarkContentElement") as ContentControl;

			if (_watermarkContent != null)
				ComputeWatermarkContentVisibility();
		}

		/// <summary>
		/// Appelé avant que la TextBox récupère le focus
		/// </summary>
		/// <param name="e">Les données de l'évènement</param>
		protected override void OnGotFocus(RoutedEventArgs e)
		{
			if (_watermarkContent != null)
				_watermarkContent.Visibility = Visibility.Collapsed;

			base.OnGotFocus(e);
		}

		/// <summary>
		/// Appelé avant que la TextBox ne perde le focus
		/// </summary>
		/// <param name="e">Les données de l'évènement</param>
		protected override void OnLostFocus(RoutedEventArgs e)
		{
			if ((_watermarkContent != null) && (String.IsNullOrEmpty(Text)))
				_watermarkContent.Visibility = Visibility.Visible;

			base.OnLostFocus(e);
		}

		private static void OnWatermarkPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
		{
			TextBoxInfo self = sender as TextBoxInfo;

			if ((self != null) && (self._watermarkContent != null))
			{
				self.ComputeWatermarkContentVisibility();
			}
		}
		#endregion
	}

Création du style associé

Nous disposons dont un nouveau ContentControl que nous utiliserons pour afficher l’indication visuelle.

WP7-TextBoxInfo-Watermark

<ControlTemplate x:Key="PhoneDisabledTextBoxTemplate"
					 TargetType="TextBox">
		<ContentControl x:Name="ContentElement"
						BorderThickness="0"
						HorizontalContentAlignment="Stretch"
						Margin="{StaticResource PhoneTextBoxInnerMargin}"
						Padding="{TemplateBinding Padding}"
						VerticalContentAlignment="Stretch" />
	</ControlTemplate>

	<Style  TargetType="Controls:TextBoxInfo">
		<Setter Property="FontFamily"
				Value="{StaticResource PhoneFontFamilyNormal}" />
		<Setter Property="FontSize"
				Value="{StaticResource PhoneFontSizeMediumLarge}" />
		<Setter Property="Background"
				Value="{StaticResource PhoneTextBoxBrush}" />
		<Setter Property="Foreground"
				Value="{StaticResource PhoneTextBoxForegroundBrush}" />
		<Setter Property="BorderBrush"
				Value="{StaticResource PhoneTextBoxBrush}" />
		<Setter Property="SelectionBackground"
				Value="{StaticResource PhoneAccentBrush}" />
		<Setter Property="SelectionForeground"
				Value="{StaticResource PhoneTextBoxSelectionForegroundBrush}" />
		<Setter Property="BorderThickness"
				Value="{StaticResource PhoneBorderThickness}" />
		<Setter Property="Padding"
				Value="2" />
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="Controls:TextBoxInfo">
					<Grid Background="Transparent">
						<VisualStateManager.VisualStateGroups>
							<VisualStateGroup x:Name="CommonStates">
								<VisualState x:Name="Normal" />
								<VisualState x:Name="MouseOver" />
								<VisualState x:Name="Disabled">
									<Storyboard>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
																	   Storyboard.TargetName="EnabledBorder">
											<DiscreteObjectKeyFrame KeyTime="0">
												<DiscreteObjectKeyFrame.Value>
													<Visibility>Collapsed</Visibility>
												</DiscreteObjectKeyFrame.Value>
											</DiscreteObjectKeyFrame>
										</ObjectAnimationUsingKeyFrames>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
																	   Storyboard.TargetName="DisabledOrReadonlyBorder">
											<DiscreteObjectKeyFrame KeyTime="0">
												<DiscreteObjectKeyFrame.Value>
													<Visibility>Visible</Visibility>
												</DiscreteObjectKeyFrame.Value>
											</DiscreteObjectKeyFrame>
										</ObjectAnimationUsingKeyFrames>
									</Storyboard>
								</VisualState>
								<VisualState x:Name="ReadOnly">
									<Storyboard>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
																	   Storyboard.TargetName="EnabledBorder">
											<DiscreteObjectKeyFrame KeyTime="0">
												<DiscreteObjectKeyFrame.Value>
													<Visibility>Collapsed</Visibility>
												</DiscreteObjectKeyFrame.Value>
											</DiscreteObjectKeyFrame>
										</ObjectAnimationUsingKeyFrames>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
																	   Storyboard.TargetName="DisabledOrReadonlyBorder">
											<DiscreteObjectKeyFrame KeyTime="0">
												<DiscreteObjectKeyFrame.Value>
													<Visibility>Visible</Visibility>
												</DiscreteObjectKeyFrame.Value>
											</DiscreteObjectKeyFrame>
										</ObjectAnimationUsingKeyFrames>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background"
																	   Storyboard.TargetName="DisabledOrReadonlyBorder">
											<DiscreteObjectKeyFrame KeyTime="0"
																	Value="{StaticResource PhoneTextBoxBrush}" />
										</ObjectAnimationUsingKeyFrames>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush"
																	   Storyboard.TargetName="DisabledOrReadonlyBorder">
											<DiscreteObjectKeyFrame KeyTime="0"
																	Value="{StaticResource PhoneTextBoxBrush}" />
										</ObjectAnimationUsingKeyFrames>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground"
																	   Storyboard.TargetName="DisabledOrReadonlyContent">
											<DiscreteObjectKeyFrame KeyTime="0"
																	Value="{StaticResource PhoneTextBoxReadOnlyBrush}" />
										</ObjectAnimationUsingKeyFrames>
									</Storyboard>
								</VisualState>
							</VisualStateGroup>
							<VisualStateGroup x:Name="FocusStates">
								<VisualState x:Name="Focused">
									<Storyboard>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background"
																	   Storyboard.TargetName="EnabledBorder">
											<DiscreteObjectKeyFrame KeyTime="0"
																	Value="{StaticResource PhoneTextBoxEditBackgroundBrush}" />
										</ObjectAnimationUsingKeyFrames>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush"
																	   Storyboard.TargetName="EnabledBorder">
											<DiscreteObjectKeyFrame KeyTime="0"
																	Value="{StaticResource PhoneTextBoxEditBorderBrush}" />
										</ObjectAnimationUsingKeyFrames>
									</Storyboard>
								</VisualState>
								<VisualState x:Name="Unfocused" />

							</VisualStateGroup>
						</VisualStateManager.VisualStateGroups>
						<Border x:Name="EnabledBorder"
								BorderBrush="{TemplateBinding BorderBrush}"
								BorderThickness="{TemplateBinding BorderThickness}"
								Background="{TemplateBinding Background}"
								Margin="{StaticResource PhoneTouchTargetOverhang}">
							<Grid>

								<ContentControl x:Name="WatermarkContentElement"
												IsHitTestVisible="False"
												Background="Transparent"
												Padding="{TemplateBinding Padding}"
												Content="{TemplateBinding WatermarkContent}"
												HorizontalAlignment="Left"
												Opacity="0.5" />

								<ContentControl x:Name="ContentElement"
												BorderThickness="0"
												HorizontalContentAlignment="Stretch"
												Margin="{StaticResource PhoneTextBoxInnerMargin}"
												Padding="{TemplateBinding Padding}"
												VerticalContentAlignment="Stretch" />
							</Grid>
						</Border>
						<Border x:Name="DisabledOrReadonlyBorder"
								BorderBrush="{StaticResource PhoneDisabledBrush}"
								BorderThickness="{TemplateBinding BorderThickness}"
								Background="Transparent"
								Margin="{StaticResource PhoneTouchTargetOverhang}"
								Visibility="Collapsed">
							<TextBox x:Name="DisabledOrReadonlyContent"
									 Background="Transparent"
									 Foreground="{StaticResource PhoneDisabledBrush}"
									 FontWeight="{TemplateBinding FontWeight}"
									 FontStyle="{TemplateBinding FontStyle}"
									 FontSize="{TemplateBinding FontSize}"
									 FontFamily="{TemplateBinding FontFamily}"
									 IsReadOnly="True"
									 SelectionForeground="{TemplateBinding SelectionForeground}"
									 SelectionBackground="{TemplateBinding SelectionBackground}"
									 TextAlignment="{TemplateBinding TextAlignment}"
									 TextWrapping="{TemplateBinding TextWrapping}"
									 Text="{TemplateBinding Text}"
									 Template="{StaticResource PhoneDisabledTextBoxTemplate}" />
						</Border>
					</Grid>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>

Utilisation du composant

<Controls:TextBoxInfo WatermarkContent="Rechercher..." />

Rendu

WP7-TextBoxInfo-Watermark-Rendu

Sympa non ? 🙂

[WP7] : Silverlight Control Toolkit pour WP7.1 – Novembre

Une nouvelle version du Silverlight Control Toolkit pour Windows Phone 7.1 vient de sortir.

WP7 - silverlight toolkit - november

C’est par ici :

What’s new

  • ListPicker once again works in a ScrollViewer
  • LongListSelector bug fixes around OutOfRange exceptions, wrong ordering of items, grouping issues, and scrolling events. ItemTuple is now refactored to be the public type LongListSelectorItem to provide users better access to the values in selection changed handlers.
  • PerformanceProgressBar binding fix for IsIndeterminate (item 9767 and others)
  • There is no longer a GestureListener dependency with the ContextMenu, WrapPanel, and ListPicker
  • The GestureListener should be considered deprecated for all Windows Phone 7.1 SDK development. There is no direct replacement at this time, though the platform now supports events such as Tap right on visual elements.

Other changes

  • Updates the ExpanderView sample so that each individual item has its own tilt effect.
  • Fixes PhoneTextBox bugs 9342 and 9345
  • PhoneTextBox hides actionitem when empty
  • ListPicker can be in horizontally scrollable views.
  • ListPicker now only supports Tap for activation (before it supported any touch that began in bounds and stayed in bounds)
  • The LongListSelector’s Background color now is used for the picker grid to enable better app/brand styling
  • LongListSelector state name correction
  • Comments added to clarify that ListPicker does not support UIElements directly by design since the framework only permits one instance of a UI Element in the tree at a time
  • ExpanderView visual glitch fixed (9525)
  • Additional null checks in ContextMenu visual state change methods
  • ListPicker SelectedItems is now settable
  • Small fixes to ToggleSwitch
  • A startup crash correction in the gesture listener.
  • The ExpanderView sample is documented better
  • LockablePivot’s IsLocked property is now a dependency property
  • RelativeTimerConverter fixes a UTC bug and no longer throws on future dates
  • Fixes some reported issues with VB.NET samples
  • Fixed a ToggleSwitchButton reanimation issue.
  • Owner is a public property now on ContextMenu
  • Handle listpicker selected item with a null items
  • Fixes sample issues when building.
  • Fixes build warnings.
Catégories :Silverlight, Windows Phone 7

[WP7] : Silverlight Toolkit Août 2011

Silverlight-Toolkit-Windows-Phone-7

Microsoft vient de sortir une nouvelle version du projet Silverlight Toolkit spécialement mis à jour pour Windows Phone Mango.
C’est une excellent nouvelle pour les développeur d’application souhaitant publier les applications reposant sur des fonctionnalités Mango.

Silverlight-Toolkit-August-2011

Voici la liste des nouveautés :

  • LongListSelector avec le scroll fluide
  • MultiselectList
  • LockablePivot
  • HubTile
  • ExpanderView
  • LocalizedResources
  • DateTimeConverters
  • DateTimePickers
  • HeaderedItemsControl
  • PhoneTextBox
  • Transitions (meilleurs performances)
  • ContextMenu (meilleurs performances)
  • ListPicker avec multi sélection
  • Bug Fix

 

Toutefois il ne vous reste que quelques jours pour tester votre application avec cette nouvelle version du Toolkit car la soumission d’applications fonctionnant sur Mango débute le 22 août prochain (voir ici) ! vite le temps presse 🙂

Vous pouvez télécharger le Toolkit ici

Bonne chance à tous pour être présent lors de la disponibilité de Mango au grand public 🙂

Catégories :Windows Phone 7