Подтвердить что ты не робот

Как изменить формат даты в элементе управления Silverlight DatePicker?

Это отлично работает:

<my:DatePicker IsTodayHighlighted="True" Width="200">
</my:DatePicker> 

Но я хочу отформатировать дату, что-то вроде этого:

<my:DatePicker IsTodayHighlighted="True" Width="200" Format="yyyy-mm-dd">
</my:DatePicker> 

Кто-нибудь знает синтаксис для этого?

4b9b3361

Ответ 1

К сожалению, элемент управления DatePicker в настоящее время не поддерживает бесплатные форматы DateTime.

Если вы заинтересованы в поддержке поддержки в будущей версии DatePicker, создайте запрос функции codeplex, который предлагает это. http://silverlight.codeplex.com/WorkItem/Create.aspx

Просто отметим, что новые элементы Silverlight Toolkit March 2009 TimePicker и TimeUpDown поддерживают полный диапазон параметров глобализации. Один из них включает бесплатные форматы DateTime. Так что это просто вопрос общественного интереса к тому, переносим ли мы эту способность обратно на DatePicker. Посмотрите формат для TimePicker @ http://silverlight.codeplex.com/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%201#TimePicker

В то же время лучшим решением является либо изменение локальной культуры, либо формат в местной культуре.

    public App()
    {
        Thread.CurrentThread.CurrentCulture = new CultureInfo("nl-NL");

или изменить формат локальной культуры.

        public App()
    {
        Thread.CurrentThread.CurrentCulture = (CultureInfo) Thread.CurrentThread.CurrentCulture.Clone();
        Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "D/m/yyyy";

Ответ 2

Вы должны определить настраиваемый шаблон управления и отредактировать текстовое поле элемента управления datepicker для форматирования текста.

Ответ 3

В Silverlight DatePicker есть свойство SelectedDateFormat, это может быть то, что вы ищете.

Ответ 4

Вы можете просто скрыть текстовое поле управления (с меньшей шириной), показать, что вы являетесь владельцем (необязательно установить IsEnabled на false) и использовать привязку элементов и конвертер. Если вы используете MVVM, установите DataContext в свою ViewModel. Я полагаю, что другой вариант заключается в том, чтобы перезаписать DataTemplate, чтобы не включать текстовое поле и делать ту же идею.

<StackPanel Orientation="Horizontal" Height="22">
      <TextBox x:Name="textBox2" Width="106" Text="{Binding ElementName=datePicker2, Path=SelectedDate, Mode=TwoWay, Converter={StaticResource internationalDateTimeFormatConverter}}" />
      <controls:DatePicker x:Name="datePicker2" IsTabStop="False" SelectedDate="{Binding TargetDatePicker, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" Width="23" HorizontalAlignment="Left" />
</StackPanel>

UPDATE: Связывание TwoWay из текстового поля с элементом выбора даты работает хорошо, но оно не обновляет свойство ViewModel. Поэтому я собираюсь установить IsEnabled = False и называть его хорошим.

Ответ 5

Я замечаю, что это ответ на вопрос.

Но я хотел бы сообщить об этой ссылке в набор инструментов управления Silverlight 5, который я недавно начал создавать. Он содержит (среди других элементов управления) элемент управления DateTimeBox, в котором вы можете обрабатывать как дату, так и время в пределах одного элемента управления. На данный момент он все еще находится в разработке, но он должен использоваться для большинства сценариев.