乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       牛人的尾巴 2016-03-07

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



      .net wpf 日期時(shí)間datetime datetimepicker datetime-format
      我想更改日期的WPF應(yīng)用程序中選擇了格式
      本文地址 :CodeGo.net/38065/
      -------------------------------------------------------------------------------------------------------------------------
      1. 我被這個問題rencetly處理。我發(fā)現(xiàn)執(zhí)行此自定義格式的簡單方法,我希望這幫助你。你需要做的優(yōu)先件事情就是申請一個特定的樣式到當(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>
      
      正如你可以在這部分看到,存在一個叫于作出具有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的一個DateFormat的附加屬性,讓你提供一個格式字符串的顯示和輸入。 對于輸入它會嘗試所提供的格式 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)是不是一個好主意。 當(dāng)然,你可以創(chuàng)建Control源自DatePicker喜歡和依賴屬性Format,但是這花費(fèi)太多精力。 簡單而優(yōu)雅的解決方案,我覺得是有constraints力的值不SelectedDate本身,而是財(cái)產(chǎn)(ToolTip屬性為這個),并更新此屬性時(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ǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多