How to change format (e.g. dd/MMM/yyyy) of DateTimePicker in WPF application

后端 未结 9 2164
春和景丽
春和景丽 2020-12-14 03:52

I want to Change the Format of date selected in DateTimePicker in WPF Application

相关标签:
9条回答
  • 2020-12-14 04:17

    In XAML:

    <toolkit:DatePicker SelectedDateFormat="Long" />
    

    or

    <toolkit:DatePicker SelectedDateFormat="Short" />
    
    0 讨论(0)
  • 2020-12-14 04:21

    Add this style to your xaml or App.xaml file

     <Style TargetType="{x:Type DatePickerTextBox}">
         <Setter Property="VerticalContentAlignment" Value="Center"/>
         <Setter Property="Control.Template">
             <Setter.Value>
                 <ControlTemplate>
                     <TextBox x:Name="PART_TextBox"
                Text="{Binding Path=SelectedDate, StringFormat='dd.MM.yyyy', 
                RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" />
                 </ControlTemplate>
             </Setter.Value>
         </Setter>
     </Style>
    
    0 讨论(0)
  • 2020-12-14 04:25

    As for me, changing environment to change DatePicker format (like Thread.CurrentCulture) is not a good idea. Sure, you can create Control derived from DatePicker and implement dependency property like Format, but this costs too much effort.

    Simple and elegant solution I found is binding value not to SelectedDate itself, but to some unused property (I used ToolTip property for this) and update this property when SelectedDate is changed.

    C# implementation for one-way binding looks like this:

        DatePicker datePicker = new DatePicker();
        datePicker.SetBinding(ToolTipProperty, "Date");
        datePicker.SelectedDateChanged += (s, ea) =>
            {
                DateTime? date = datePicker.SelectedDate;
                string value = date != null ? date.Value.ToString("yyyy-MM-dd") : null;
                datePicker.ToolTip = value;
            };
    

    XAML+C# should look like this:

    XAML:

    <DatePicker ToolTip="{Binding Date Mode=TwoWay}"
                SelectedDateChanged="DatePicker_SelectedDateChanged"/>
    

    C#:

    private void DatePicker_SelectedDateChanged(object sender, EventArgs ea)
    {
        DatePicker datePicker = (DatePicker)sender;
        DateTime? date = datePicker.SelectedDate;
        string value = date != null ? date.Value.ToString("yyyy-MM-dd") : null;
        datePicker.ToolTip = value;
    }
    

    For two-way implementation handle ToolTipChanged event the same way to update SelectedDate.

    0 讨论(0)
提交回复
热议问题