style wpf datepicker wpftoolkit

style - datepicker wpf format



Cambiar el formato de cadena del WPF DatePicker (8)

Clase de convertidor:

public class DateFormat : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value == null) return null; return ((DateTime)value).ToString("dd-MMM-yyyy"); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }

etiqueta wpf

<DatePicker Grid.Column="3" SelectedDate="{Binding DateProperty, Converter={StaticResource DateFormat}}" Margin="5"/>

Espero eso ayude

Necesito cambiar el formato de cadena del DatePickerTextBox en el WPF Toolkit DatePicker, para usar guiones en lugar de barras para los separadores.

¿Hay alguna manera de anular esta cultura predeterminada o el formato de cadena de visualización?

01-01-2010


El WPF Toolkit DateTimePicker ahora tiene una propiedad Format y una propiedad FormatString . Si especifica Custom como tipo de formato, puede proporcionar su propia cadena de formato.

<wpftk:DateTimePicker Value="{Binding Path=StartTime, Mode=TwoWay}" Format="Custom" FormatString="MM/dd/yyyy hh:mmtt"/>


Formato exhibido dependiendo de la ubicación, pero esto se puede evitar escribiendo esto:

ValueStringFormat="{}{0:MM''-''yy}" />

¡Y serás feliz! (Dd ''-'' MM ''-'' yyy)


He resuelto este problema con la ayuda de este código. Espero que les ayude a todos también.

<Style TargetType="{x:Type DatePickerTextBox}"> <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate> <TextBox x:Name="PART_TextBox" Text="{Binding Path=SelectedDate, StringFormat=''dd MMM yyyy'', RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" /> </ControlTemplate> </Setter.Value> </Setter> </Style>


La respuesta aceptada (gracias @petrycol) me puso en el camino correcto, pero estaba obteniendo otro borde de cuadro de texto y color de fondo dentro del selector de fecha real. Se corrigió usando el siguiente código.

<Style TargetType="{x:Type Control}" x:Key="DatePickerTextBoxStyle"> <Setter Property="BorderThickness" Value="0"/> <Setter Property="VerticalAlignment" Value="Center"/> <Setter Property="Background" Value="{x:Null}"/> </Style> <Style TargetType="{x:Type DatePickerTextBox}" > <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate> <TextBox x:Name="PART_TextBox" Text="{Binding Path=SelectedDate, StringFormat=''dd-MMM-yyyy'', RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" Style="{StaticResource DatePickerTextBoxStyle}" > </TextBox> </ControlTemplate> </Setter.Value> </Setter> </Style>


Parece, según la respuesta de Wonko, que no puede especificar el formato de fecha en formato Xaml o heredando el DatePicker.

He puesto el siguiente código en el constructor de mi vista que anula ShortDateFormat para el hilo actual:

CultureInfo ci = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name); ci.DateTimeFormat.ShortDatePattern = "dd-MM-yyyy"; Thread.CurrentThread.CurrentCulture = ci;


XAML

<DatePicker x:Name="datePicker" />

DO#

var date = Convert.ToDateTime(datePicker.Text).ToString("yyyy/MM/dd");

pon el formato que quieras en ToString ("") por ejemplo ToString ("dd MMM yyy") y el formato de salida será el 7 de junio de 2017


NOTA: Esta respuesta (originalmente escrita en 2010) es para versiones anteriores. Vea otras respuestas para usar un formato personalizado con versiones más nuevas

Desafortunadamente, si está hablando de XAML, está atascado con la configuración de SelectedDateFormat en "Largo" o "Corto".

Si descargó la fuente del Toolkit junto con los binarios, puede ver cómo se define. Estos son algunos de los aspectos más destacados de ese código:

DatePicker.cs

#region SelectedDateFormat /// <summary> /// Gets or sets the format that is used to display the selected date. /// </summary> public DatePickerFormat SelectedDateFormat { get { return (DatePickerFormat)GetValue(SelectedDateFormatProperty); } set { SetValue(SelectedDateFormatProperty, value); } } /// <summary> /// Identifies the SelectedDateFormat dependency property. /// </summary> public static readonly DependencyProperty SelectedDateFormatProperty = DependencyProperty.Register( "SelectedDateFormat", typeof(DatePickerFormat), typeof(DatePicker), new FrameworkPropertyMetadata(OnSelectedDateFormatChanged), IsValidSelectedDateFormat); /// <summary> /// SelectedDateFormatProperty property changed handler. /// </summary> /// <param name="d">DatePicker that changed its SelectedDateFormat.</param> /// <param name="e">DependencyPropertyChangedEventArgs.</param> private static void OnSelectedDateFormatChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { DatePicker dp = d as DatePicker; Debug.Assert(dp != null); if (dp._textBox != null) { // Update DatePickerTextBox.Text if (string.IsNullOrEmpty(dp._textBox.Text)) { dp.SetWaterMarkText(); } else { DateTime? date = dp.ParseText(dp._textBox.Text); if (date != null) { dp.SetTextInternal(dp.DateTimeToString((DateTime)date)); } } } } #endregion SelectedDateFormat private static bool IsValidSelectedDateFormat(object value) { DatePickerFormat format = (DatePickerFormat)value; return format == DatePickerFormat.Long || format == DatePickerFormat.Short; } private string DateTimeToString(DateTime d) { DateTimeFormatInfo dtfi = DateTimeHelper.GetCurrentDateFormat(); switch (this.SelectedDateFormat) { case DatePickerFormat.Short: { return string.Format(CultureInfo.CurrentCulture, d.ToString(dtfi.ShortDatePattern, dtfi)); } case DatePickerFormat.Long: { return string.Format(CultureInfo.CurrentCulture, d.ToString(dtfi.LongDatePattern, dtfi)); } } return null; }

DatePickerFormat.cs

public enum DatePickerFormat { /// <summary> /// Specifies that the date should be displayed /// using unabbreviated days of the week and month names. /// </summary> Long = 0, /// <summary> /// Specifies that the date should be displayed ///using abbreviated days of the week and month names. /// </summary> Short = 1 }