using OwlCore.WinUI.Converters.Text; using System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; namespace OwlCore.WinUI.Attached { /// /// /// public partial class TextHelpers : DependencyObject { private static bool _mutex; // This is nasty /// /// Gets the value for this dependency object. /// /// /// public static CharacterCasing GetCharacterCasing(DependencyObject obj) => (CharacterCasing)obj.GetValue(CharacterCasingProperty); /// /// Sets the value for this dependency object. /// public static void SetCharacterCasing(DependencyObject obj, CharacterCasing value) => obj.SetValue(CharacterCasingProperty, value); /// /// Backing dependency property for CharacterCasing attached property. /// public static readonly DependencyProperty CharacterCasingProperty = DependencyProperty.RegisterAttached("CharacterCasing", typeof(TextHelpers), typeof(CharacterCasing), new PropertyMetadata(CharacterCasing.Normal, OnCharacterCasingChanged)); private static void OnCharacterCasingChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var val = (CharacterCasing)e.NewValue; DependencyProperty prop = d switch { TextBlock txt => TextBlock.TextProperty, TextBox tbox => TextBox.PlaceholderTextProperty, ButtonBase hBtn => ButtonBase.ContentProperty, PivotItem pvi => PivotItem.HeaderProperty, _ => throw new ArgumentException(), }; d.RegisterPropertyChangedCallback(prop, (s, e) => { if (_mutex) return; _mutex = true; d.SetValue(prop, CaseConverter.Convert((string)d.GetValue(prop), val)); _mutex = false; }); } } }