/// <summary> /// Converts received text accordingly to <see cref="AutoCapitalizeMode"/> /// </summary> /// <param name="text">text that should be converted</param> /// <param name="culture"> culture info that should be used for conversion</param> /// <param name="mode">conversion mode</param> /// <returns>converted text</returns> public static string Convert(string text, CultureInfo culture, AutoCapitalizeMode mode = AutoCapitalizeMode.Sentences) { if (string.IsNullOrEmpty(text)) { return(text); } if (culture == null) { culture = CultureInfo.CurrentUICulture; } switch (mode) { case AutoCapitalizeMode.Characters: return(CharacterConvertStrategy(text, culture)); case AutoCapitalizeMode.None: return(text); case AutoCapitalizeMode.Words: return(WordConvertStrategy(text, culture)); case AutoCapitalizeMode.Sentences: default: return(SentencesConvertStrategy(text, culture)); } }
/// <summary> /// Build converter for autoCapitalize /// </summary> /// <param name="mode"><see cref="AutoCapitalizeMode"/></param> /// <returns>Instance that binds converter to the control</returns> internal static BindingBase GetBinder(AutoCapitalizeMode mode) { // Trick! To bind converter to control w/o Path we use MultiBinding where: // 1st binding is done to RelativeSource.Self // 2nd binding is done to fake source // MultiBinding contains reference to desired converter var multiBinding = new MultiBinding(); multiBinding.Bindings.Add(new Binding { RelativeSource = RelativeSource.Self, Mode = BindingMode.OneTime }); multiBinding.Bindings.Add(new Binding("MyValue")); multiBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; multiBinding.Converter = new AutoCapitalizeMultiConverter(); multiBinding.ConverterParameter = mode; return(multiBinding); }