WPF DatePicker и его TextBox
От: Аноним  
Дата: 08.12.10 02:10
Оценка:
Добрый день всем!

Собственно проблемка возникла — получить доступ к TextBox-у DatePicker-a — с целью установить выделение на цифры Числа в текст боксе.
Заказчик просит чтобы когда фокус падал на дэйтпикер, чтобы ему не париться с удалением символов и сразу можно было ввести с клавы Число.
В общем чего-то до текст бокса докопаться не могу...
Re: WPF DatePicker и его TextBox
От: Sinix  
Дата: 08.12.10 02:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день всем!


А>Собственно проблемка возникла — получить доступ к TextBox-у DatePicker-a — с целью установить выделение на цифры Числа в текст боксе.

А>Заказчик просит чтобы когда фокус падал на дэйтпикер, чтобы ему не париться с удалением символов и сразу можно было ввести с клавы Число.
А>В общем чего-то до текст бокса докопаться не могу...

Можно использовать грязный хак (искать It looks like someone forgot to expose the Watermark property), или добраться через visual tree (искать DatePickerTextBox x:Name="PART_TextBox"). Никаких гарантий, что не перестанет работать при подмене шаблона своим.

Кстати, а как вы обошли нелокализованнный watermark?
Способ обхода — по ссылке. Багрепорт
Re[2]: WPF DatePicker и его TextBox
От: Аноним  
Дата: 08.12.10 03:30
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Аноним, Вы писали:


А>>Добрый день всем!


А>>Собственно проблемка возникла — получить доступ к TextBox-у DatePicker-a — с целью установить выделение на цифры Числа в текст боксе.

А>>Заказчик просит чтобы когда фокус падал на дэйтпикер, чтобы ему не париться с удалением символов и сразу можно было ввести с клавы Число.
А>>В общем чего-то до текст бокса докопаться не могу...

S>Можно использовать грязный хак (искать It looks like someone forgot to expose the Watermark property), или добраться через visual tree (искать DatePickerTextBox x:Name="PART_TextBox"). Никаких гарантий, что не перестанет работать при подмене шаблона своим.


S>Кстати, а как вы обошли нелокализованнный watermark?

S>Способ обхода — по ссылке. Багрепорт


В общем попробовал:

Если вот так написать:


private void datePicker2_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {
            FieldInfo fiTextBox = datePicker2.GetType().GetField("_textBox", BindingFlags.Instance | BindingFlags.NonPublic);

            if (fiTextBox != null)
            {
                DatePickerTextBox dateBox1 = (DatePickerTextBox)fiTextBox.GetValue(datePicker2);

                if (dateBox1 != null)
                {
                    dateBox1.Select(0, 2);
                }
            }
        }



То при попадании на элемент фокуса с помощью таба = все пучком — две первые цифры даты выбираются

Теперь бы ещё дописать какнить чтобы при загрузке формы фокус падал на дэйтпикер и следовательно выполнялся код который я показал выше.

Просто datePicker.Focus() не срабатывает и просто курсор в текстовое поле ставит...
Re[3]: WPF DatePicker и его TextBox
От: Sinix  
Дата: 08.12.10 03:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Теперь бы ещё дописать какнить чтобы при загрузке формы фокус падал на дэйтпикер и следовательно выполнялся код который я показал выше.


А>Просто datePicker.Focus() не срабатывает и просто курсор в текстовое поле ставит...


Хмм... а подпишитесь на GotKeyboardFocus у самого _textBox.
Re[3]: WPF DatePicker и его TextBox
От: MxMsk Португалия  
Дата: 08.12.10 08:14
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>В общем попробовал:

А>Если вот так написать:
Лучше так не писать. Поле _textBox всего лишь хранит ссылку на элемент шаблона с именем PART_TextBox, уже упомянутый Sinix-ом. Всё это вполне можно заменить на более легальный код:
DatePickerTextBox dateBox1 = datePicker2.Template.FindName("PART_TextBox", datePicker2) as DatePickerTextBox;
if (dateBox1 != null)
{
    dateBox1.Select(0, 2);
}
Re[2]: WPF DatePicker и его TextBox
От: notacat  
Дата: 08.12.10 10:28
Оценка: 16 (1)
S>Способ обхода — по ссылке. Багрепорт
как сейчас помню, я тоже это постила, только давно: https://connect.microsoft.com/VisualStudio/feedback/details/522055/please-make-datepicker-watermark-public
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.