Click here to Skip to main content
15,881,803 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 86.7K   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;
using System.Windows.Data;

namespace CustomPicker.Utility
{
    /// <summary>
    /// Value converter to a string to a double value
    /// </summary>
    [ValueConversion(typeof(double), typeof(string))]
    public class DoubleStringConverter : IValueConverter
    {
        #region IValueConverter Members

        /// <summary>
        /// Implement the Convert method of IValueConverter. Convert a string to a double value.
        /// </summary>
        /// <param name="value">The string value we're testing</param>
        /// <param name="targetType">Not used</param>
        /// <param name="parameter">Not used</param>
        /// <param name="culture">Not used</param>
        /// <returns>Collapsed if value is true, else Visible</returns>
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            double dValue = 0.0; // initial value
            string sValue = value as string;

            if (!string.IsNullOrEmpty(sValue))
                double.TryParse(sValue, out dValue);

            return dValue;
        }

        /// <summary>
        /// Implement the ConvertBack method of IValueConverter. Converts a double value to string.
        /// </summary>
        /// <param name="value">The double value to convert to a string.</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 ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string calculatorString = (string)value;
            double calculatorValue;

            if (Double.TryParse(calculatorString, out calculatorValue))
                return calculatorValue;

            return DependencyProperty.UnsetValue;
        }

        #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