Changer le format de chaîne de caractères du lecteur de données WPF

je dois changer le format de la chaîne de caractères de la boîte de dialogue de données dans le WPF Toolkit DatePicker, pour utiliser des traits d'Union plutôt que des barres obliques pour les séparateurs.

y a-t-il un moyen de remplacer cette culture par défaut ou le format de chaîne d'affichage?

01-01-2010
38
demandé sur benPearce 2010-09-29 12:18:37

8 réponses

j'ai résolu ce problème avec l'aide de ce code. Espérons, vous aidera à tous.

<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>
84
répondu petrycol 2012-04-09 13:31:48

il semble, selon la réponse de Wonko, que vous ne pouvez pas spécifier le format de la Date au format Xaml ou en héritant du lecteur de données.

j'ai mis le code suivant dans le constructeur de ma vue qui remplace le ShortDateFormat pour le thread courant:

CultureInfo ci = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
ci.DateTimeFormat.ShortDatePattern = "dd-MM-yyyy";
Thread.CurrentThread.CurrentCulture = ci;
21
répondu benPearce 2010-10-06 03:59:46

WPF Toolkit DateTimePicker a maintenant un Format propriété et un FormatString propriété. Si vous spécifiez Custom comme type de format, vous pouvez fournir votre propre chaîne de format.

<wpftk:DateTimePicker
    Value="{Binding Path=StartTime, Mode=TwoWay}"
    Format="Custom"
    FormatString="MM/dd/yyyy hh:mmtt"/>
11
répondu Jordan Parmer 2013-06-21 13:03:49

la réponse acceptée (merci @petrycol) m'a mis sur la bonne voie, mais j'obtenais une autre bordure de boîte de texte et la couleur de fond dans le vrai date picker. Corrigé en utilisant le code suivant.

        <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>
10
répondu Mark B 2016-11-15 11:13:37

NOTE: Cette réponse (écrite à l'origine en 2010) est pour les versions précédentes. Voir d'autres réponses pour utiliser un format personnalisé avec des versions plus récentes

malheureusement, si vous parlez de XAML, vous êtes coincé avec selecteddateformat de "Long" ou "court".

si vous avez téléchargé la source de la boîte à outils avec les binaires, vous pouvez voir comment elle est définie. Voici certains des points saillants de cette code:

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;
}

Datapickerformat.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
}
6
répondu Wonko the Sane 2018-05-25 16:03:39

classe du convertisseur:

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();
    }
}

wpf balise

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

j'Espère que ça aide

1
répondu alkk 2015-01-27 14:18:10

XAML

 <DatePicker x:Name="datePicker" />

C#

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

mettre ce que jamais le format que vous souhaitez dans ToString("") par exemple ToString("jj MMM aaaa") et le format de sortie sera de 7 Juin 2017

1
répondu Usman Ali 2017-07-07 16:51:42

le Format présenté dépend de l'endroit mais cela peut être évité en écrivant ceci:

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

Et vous serez heureux!(jj'-'MM'-'yyy)

0
répondu Denis Prohorchik 2015-08-11 14:19:48