Здравствуйте, Аноним, Вы писали:
А>Добрый день всем!
А>Собственно проблемка возникла — получить доступ к TextBox-у DatePicker-a — с целью установить выделение на цифры Числа в текст боксе.
А>Заказчик просит чтобы когда фокус падал на дэйтпикер, чтобы ему не париться с удалением символов и сразу можно было ввести с клавы Число.
А>В общем чего-то до текст бокса докопаться не могу...
Можно использовать
грязный хак (искать It looks like someone forgot to expose the Watermark property), или добраться через visual tree (искать DatePickerTextBox x:Name="PART_TextBox"). Никаких гарантий, что не перестанет работать при подмене шаблона своим.
Кстати, а как вы обошли нелокализованнный watermark?
Способ обхода — по ссылке.
Багрепорт
Здравствуйте, 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() не срабатывает и просто курсор в текстовое поле ставит...
Здравствуйте, Аноним, Вы писали:
А>В общем попробовал:
А>Если вот так написать:
Лучше так не писать. Поле _textBox всего лишь хранит ссылку на элемент шаблона с именем PART_TextBox, уже упомянутый Sinix-ом. Всё это вполне можно заменить на более легальный код:
DatePickerTextBox dateBox1 = datePicker2.Template.FindName("PART_TextBox", datePicker2) as DatePickerTextBox;
if (dateBox1 != null)
{
dateBox1.Select(0, 2);
}