Click here to Skip to main content
15,894,825 members
Articles / Desktop Programming / WPF

How to extend a WPF Textbox to Custom Picker

Rate me:
Please Sign up or sign in to vote.
4.86/5 (21 votes)
24 Nov 2012CPOL7 min read 87.2K   4.4K   37  
This article is to show how to extend a standard WPF Textbox to behave as a Picker via Template Style.
using System;
using System.Windows.Data;

namespace CustomPicker.Utility
{
    /// <summary>
    /// Value converter to convert a datetime object to the specified string format. 
    ///   If the format is not specified, it will be converted to short date string "12/31/2011"
    /// </summary>
    [ValueConversion(typeof(DateTime), typeof(string))]
    public class CalendarConverter : IValueConverter
    {
        #region IValueConverter Members

        /// <summary>
        /// Implement the ConvertBack method of IValueConverter. Converts DateTime object to specified format
        /// </summary>
        /// <param name="value">The DateTime value we're converting</param>
        /// <param name="targetType">Not used</param>
        /// <param name="parameter">String format to convert to (optional)</param>
        /// <param name="culture">Not used</param>
        /// <returns>Collapsed if value is true, else Visible</returns>
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            DateTime date = (DateTime)value;
            string param = parameter as string;

            return string.IsNullOrEmpty(param) ? date.ToShortDateString() : date.ToString(param);
        }

        /// <summary>
        /// Implement the Convert method of IValueConverter. Converts a string representation of a date to DateTime
        /// </summary>
        /// <param name="value">The visibility value to convert to a boolean.</param>
        /// <param name="targetType">Not used</param>
        /// <param name="parameter">Not used</param>
        /// <param name="culture">Not used</param>
        /// <returns>false if Visible, else true</returns>
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string dateString = (string)value;
            DateTime resultDateTime;

            if (DateTime.TryParse(dateString, out resultDateTime))
                return resultDateTime;

            return DateTime.Now;
        }

        #endregion
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect Intuit India
India India


A software professional for more than 17+ years building solutions for Web and Desktop applications.

Currently working at Intuit India.

Website: Learn By Insight
Github: Sandeep Mewara
LinkedIn: Sandeep Mewara

Strongly believe in learning and sharing knowledge.



Comments and Discussions