10
votes

WPF Toolkit DatePicker Modifier la valeur par défaut 'Afficher le calendrier'

J'utilise la dernière version WPF Toolkit , en particulier le datePicker . Tout fonctionne bien, mais quand aucune valeur n'est fournie, le texte par défaut "Afficher le calendrier" apparaît dans la date de la datePickertext. Je veux pouvoir changer cette valeur dans WPF.

On m'a dit de télécharger la source, d'ajouter une nouvelle propriété de dépendance et de recompiler à la DLL. C'est cool mais si la nouvelle version est libérée?

C'est pourquoi je voudrais modeler ce contrôle de cette manière que je pourrai remplacer cette chaîne par défaut. Aucune idée de comment faire ça?

merci!


1 commentaires

J'ai trouvé une meilleure solution ici sur Matt Hamilton Blog . Works me forme excellent!


4 Réponses :


22
votes

OK. J'ai trouvé une solution par moi-même. XXX

De toute façon, Vous devez être conscient du fait , qu'il existe une dépendancePropertoire appelée filigrane qui devrait être définie à la place de le texte.

Le problème est qu'avec la dernière version de la SM (environ juin 2009), ils ont fait cette propriété loadonly pour une raison inconnue. Cela signifie que c'est le seul piratage que j'ai composé, bien qu'il y ait une première exception, car le DatePicker essaie d'analyser la chaîne (il suppose que le texte soit une date), mais normalement, vous ne le remarquerez pas.

Une autre possibilité consiste à éditer directement le code source à partir de la MS et Remplacement le SetWatermark () Method + Ajoutez votre propre propriété de dépendance (myWatermark ou quelque chose) . Mais vous ne pouvez pas utiliser le dll fourni. Ils ont dit qu'il viendra être fixé avec le .NET 4 Realee , voyons.


2 commentaires

C'est bon et tout, mais comment pouvons-nous intégrer cela dans un style existant qui cible DatePicker ???


Cela ne semble que travailler du temps de conception dans ma demande, dès que je lancerai, le texte revient à l'anglais



7
votes
    void _datePicker1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
    {
        if (_datePicker1.SelectedDate != null) return;

        FieldInfo fiTextBox = typeof(DatePicker)
            .GetField("_textBox", BindingFlags.Instance | BindingFlags.NonPublic);

        if (fiTextBox != null)
        {
            DatePickerTextBox dateTextBox =
              (DatePickerTextBox)fiTextBox.GetValue(_datePicker1);

            if (dateTextBox != null)
            {
                PropertyInfo piWatermark = dateTextBox.GetType()
                  .GetProperty("Watermark", BindingFlags.Instance | BindingFlags.NonPublic);

                if (piWatermark != null)
                {
                    piWatermark.SetValue(dateTextBox, "", null);
                }
            }
        }
    }
you'll need to hook up the Load event as well with the same code.

1 commentaires

Eh bien, je dois admettre que j'aime votre exemple avec réflexion .. de toute façon .. vous avez besoin d'un code derrière



0
votes

Cela fonctionne bien, mais vous devrez également remplacer la méthode onRender en classe personnalisée. Dans cette méthode si vous définissez le contenu en filigrane et non la propriété, il n'est pas nécessaire de remplacer l'événement SélectionnéDateChanged. Le code complet est ici: xxx


0 commentaires

0
votes

Vous pouvez également faire cela:

Ajoutez une zone de texte et un daysPicker à votre formulaire avec les paramètres suivants: p>

dans votre fenêtre.xaml: p>

private void datePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
    {
        textBox.Text = datePicker.SelectedDate.Value.ToString("dd.MM.yyyy");
    }


0 commentaires