2010-08-10 7 views
2

Lors de l'utilisation du Silverlight DatePicker, il s'ouvre par défaut sur l'affichage Jours. Quand un utilisateur doit choisir son anniversaire, il serait beaucoup plus convivial s'il pouvait d'abord sélectionner l'année et descendre immédiatement sans monter l'arbre en premier. Je peux deviner qu'environ 70% de nos utilisateurs ne comprendront même pas comment utiliser les en-têtes du calendrier pour aller «en haut», donc si je pouvais éviter cela, ce serait adorable.Comment changer le 'niveau' par défaut de DatePicker?

Existe-t-il un moyen de manipuler le niveau par lequel l'outil datepicker s'ouvre par défaut?

Existe-t-il un contrôle plus convivial dans Silverlight pour sélectionner un anniversaire?

Répondre

2

Sur le visage de celui-ci, vous devriez être en mesure de faire quelque chose comme ceci: -

 <sdk:DatePicker Name="datePicker1" > 
      <sdk:DatePicker.CalendarStyle> 
       <Style TargetType="sdk:Calendar"> 
        <Setter Property="DisplayMode" Value="Decade" /> 
       </Style> 
      </sdk:DatePicker.CalendarStyle> 
     </sdk:DatePicker> 

Pour à peu près toutes les autres caractéristiques du calendrier affiché dans le menu déroulant cela fonctionnerait. Toutefois, le code interne au DataPicker définit DisplayMode sur Month à chaque ouverture de la liste déroulante. Nous avons donc besoin de recourir à une bidouille horrible: -

private void datePicker1_CalendarOpened(object sender, RoutedEventArgs e) 
{ 

    DatePicker picker = (DatePicker)sender; 

    if (!picker.SelectedDate.HasValue) 
    { 
     var popup = picker.Descendents().OfType<Popup>().FirstOrDefault(); 
     if (popup != null) 
     { 
      var item = popup.Child.Descendents().OfType<Calendar>().FirstOrDefault(); 
      if (item != null) 
       item.DisplayMode = CalendarMode.Decade; 
     } 
    } 
} 

Voir cette answer pour ma mise en œuvre de la méthode d'extension Descendents.

+0

Bonne réponse! Merci beaucoup AnthonyWJones –

Questions connexes