private DataTemplate SelectTemplateFromValue(Object value)
        {
            if (value is String)
                return StringDataTemplate;

            //IntRangeDataTemplate.Resources.Values. IntRangeDataTemplate.Resources.OfType<RangeValueConverter>().SingleOrDefault();
            if (value is double || value is float)
                return DoubleRangeDataTemplate;
            if (value is bool)
                return BoolDataTemplate;
            if (value is System.Windows.Media.FontFamily)
                return FontTemplate;
            if (value != null)
            {
                Type valueType = value.GetType();
                DataTemplate dt = SelectTemplateFromType(valueType);
                if (dt != null)
                    return dt;
                if (value.IsIntegerType())
                    return IntRangeDataTemplate;
            }
            return null;
        }