免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
如何改變格式的DateTimePicker的WPF應(yīng)用程序(例如日/ MMM /年)實(shí)用

如何改變格式的DateTimePicker的WPF應(yīng)用程序(例如日/ MMM /年)



.net wpf 日期時(shí)間datetime datetimepicker datetime-format
我想更改日期的WPF應(yīng)用程序中選擇了格式
本文地址 :CodeGo.net/38065/
-------------------------------------------------------------------------------------------------------------------------
1. 我被這個(gè)問題rencetly處理。我發(fā)現(xiàn)執(zhí)行此自定義格式的簡單方法,我希望這幫助你。你需要做的優(yōu)先件事情就是申請一個(gè)特定的樣式到當(dāng)前的DatePicker就這樣,在您的XAML:
<DatePicker.Resources> <Style TargetType="{x:Type DatePickerTextBox}">  <Setter Property="Control.Template">   <Setter.Value>    <ControlTemplate>     <TextBox x:Name="PART_TextBox" Width="113" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Text="{Binding Path=SelectedDate,Converter={StaticResource DateTimeFormatter},RelativeSource={RelativeSource AncestorType={x:Type DatePicker}},ConverterParameter=dd-MMM-yyyy}" BorderBrush="{DynamicResource BaseBorderBrush}" />    </ControlTemplate>   </Setter.Value>  </Setter> </Style></DatePicker.Resources>
正如你可以在這部分看到,存在一個(gè)叫于作出具有constraints力的“PART_TextBox”的Text屬性轉(zhuǎn)換。該轉(zhuǎn)換器接收,包括您的自定義格式。最后,我們添加的代碼在C#中的轉(zhuǎn)換器。
public class DateTimeConverter : IValueConverter{ public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {  DateTime? selectedDate = value as DateTime?;  if (selectedDate != null)  {   string dateTimeFormat = parameter as string;   return selectedDate.Value.ToString(dateTimeFormat);  }  return "Select Date"; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {  try  {   var valor = value as string;   if (!string.IsNullOrEmpty(valor))   {    var retorno = DateTime.Parse(valor);    return retorno;   }   return null;  }  catch  {   return DependencyProperty.UnsetValue;  } }}
我希望這對您有所幫助。請知道的任何問題或建議進(jìn)行改進(jìn)。
2.
Thread.CurrentThread.CurrentCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy";  

3. 在XAML中:
<toolkit:DatePicker SelectedDateFormat="Long" />
<toolkit:DatePicker SelectedDateFormat="Short" />

4. 感謝@費(fèi)爾南多?加西亞本作的基礎(chǔ)。 我自己編寫的DatePicker的一個(gè)DateFormat的附加屬性,讓你提供一個(gè)格式字符串的顯示和輸入。 對于輸入它會嘗試所提供的格式 CodeGo.net,回跌至試圖與當(dāng)前區(qū)域性的格式解析它。 有問題的格式:
<DatePicker my:DatePickerDateFormat.DateFormat="dd/MMM/yyyy"/>
DATEFORMAT的附加屬性是:
public class DatePickerDateFormat{ public static readonly DependencyProperty DateFormatProperty =  DependencyProperty.RegisterAttached("DateFormat", typeof (string), typeof (DatePickerDateFormat),           new PropertyMetadata(OnDateFormatChanged)); public static string GetDateFormat(DependencyObject dobj) {  return (string) dobj.GetValue(DateFormatProperty); } public static void SetDateFormat(DependencyObject dobj, string value) {  dobj.SetValue(DateFormatProperty, value); } private static void OnDateFormatChanged(DependencyObject dobj, DependencyPropertyChangedEventArgs e) {  var datePicker = (DatePicker) dobj;  Application.Current.Dispatcher.BeginInvoke(   DispatcherPriority.Loaded, new Action<DatePicker>(ApplyDateFormat), datePicker); } private static void ApplyDateFormat(DatePicker datePicker) {  var binding = new Binding("SelectedDate")   {    RelativeSource = new RelativeSource {AncestorType = typeof (DatePicker)},    Converter = new DatePickerDateTimeConverter(),    ConverterParameter = new Tuple<DatePicker, string>(datePicker, GetDateFormat(datePicker))   };  var textBox = GetTemplateTextBox(datePicker);  textBox.SetBinding(TextBox.TextProperty, binding);  textBox.PreviewKeyDown -= TextBoxOnPreviewKeyDown;  textBox.PreviewKeyDown += TextBoxOnPreviewKeyDown;  datePicker.CalendarOpened -= DatePickerOnCalendarOpened;  datePicker.CalendarOpened += DatePickerOnCalendarOpened; } private static TextBox GetTemplateTextBox(Control control) {  control.ApplyTemplate();  return (TextBox) control.Template.FindName("PART_TextBox", control); } private static void TextBoxOnPreviewKeyDown(object sender, KeyEventArgs e) {  if (e.Key != Key.Return)   return;  /* DatePicker subscribes to its TextBox's KeyDown event to set its SelectedDate if Key.Return was   * pressed. When this happens its text will be the result of its internal date parsing until it   * loses focus or another date is selected. A workaround is to stop the KeyDown event bubbling up   * and handling setting the DatePicker.SelectedDate. */  e.Handled = true;  var textBox = (TextBox) sender;  var datePicker = (DatePicker) textBox.TemplatedParent;  var dateStr = textBox.Text;  var formatStr = GetDateFormat(datePicker);  datePicker.SelectedDate = DatePickerDateTimeConverter.StringToDateTime(datePicker, formatStr, dateStr); } private static void DatePickerOnCalendarOpened(object sender, RoutedEventArgs e) {  /* When DatePicker's TextBox is not focused and its Calendar is opened by clicking its calendar button   * its text will be the result of its internal date parsing until its TextBox is focused and another   * date is selected. A workaround is to set this string when it is opened. */  var datePicker = (DatePicker) sender;  var textBox = GetTemplateTextBox(datePicker);  var formatStr = GetDateFormat(datePicker);  textBox.Text = DatePickerDateTimeConverter.DateTimeToString(formatStr, datePicker.SelectedDate); } private class DatePickerDateTimeConverter : IValueConverter {  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)  {   var formatStr = ((Tuple<DatePicker, string>) parameter).Item2;   var selectedDate = (DateTime?) value;   return DateTimeToString(formatStr, selectedDate);  }  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)  {   var tupleParam = ((Tuple<DatePicker, string>) parameter);   var dateStr = (string) value;   return StringToDateTime(tupleParam.Item1, tupleParam.Item2, dateStr);  }  public static string DateTimeToString(string formatStr, DateTime? selectedDate)  {   return selectedDate.HasValue ? selectedDate.Value.ToString(formatStr) : null;  }  public static DateTime? StringToDateTime(DatePicker datePicker, string formatStr, string dateStr)  {   DateTime date;   var canParse = DateTime.TryParseExact(dateStr, formatStr, CultureInfo.CurrentCulture,             DateTimeStyles.None, out date);   if (!canParse)    canParse = DateTime.TryParse(dateStr, CultureInfo.CurrentCulture, DateTimeStyles.None, out date);   return canParse ? date : datePicker.SelectedDate;  } }}

5.
DatePicker1.SelectedDate = DatePicker1.SelectedDate.Value.ToString("dd/MM/yyyy")

6. 通常情況下,日期格式存儲在資源文件中,這將有助于在應(yīng)用程序的國際化。 你可以拿起格式從資源文件ToString(DATE_FORMAT)你的情況可能要
dateTimePicker.SelectedDate.ToString("dd-MMM-yyyy");

7. 由于改用變化DatePicker格式(如Thread.CurrentCulture)是不是一個(gè)好主意。當(dāng)然,你可以創(chuàng)建Control源自DatePicker喜歡和依賴屬性Format,但是這花費(fèi)太多精力。 簡單而優(yōu)雅的解決方案,我覺得是有constraints力的值不SelectedDate本身,而是財(cái)產(chǎn)(ToolTip屬性為這個(gè)),并更新此屬性時(shí)SelectedDate被改變。 C#進(jìn)行單向綁定看起來像這樣:
 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#看起來應(yīng)該像這樣: 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;}
對于雙向手柄ToolTipChanged事件來更新方式SelectedDate。
本文標(biāo)題 :如何改變格式的DateTimePicker的WPF應(yīng)用程序(例如日/ MMM /年)
本文地址 :CodeGo.net/38065/ 
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
c#日期與字符串間的轉(zhuǎn)換
關(guān)于DateTime和String轉(zhuǎn)換的容易犯得錯(cuò)誤
用DateTime.ToString(string format)輸出不同格式的日期
JQuery datepicker 用法
C#中的類型轉(zhuǎn)換
C#中的類型轉(zhuǎn)換 Gzu521.com我的學(xué)習(xí)網(wǎng)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服