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;
});
}
}
}