diff --git a/src/Shared/HandyControl_Shared/Tools/Extension/LangExtension.cs b/src/Shared/HandyControl_Shared/Tools/Extension/LangExtension.cs index 8c17d779..1ec15c19 100644 --- a/src/Shared/HandyControl_Shared/Tools/Extension/LangExtension.cs +++ b/src/Shared/HandyControl_Shared/Tools/Extension/LangExtension.cs @@ -39,16 +39,16 @@ namespace HandyControl.Tools.Extension => element.SetValue(TargetPropertyProperty, value); private static DependencyProperty GetTargetProperty(DependencyObject element) - => (DependencyProperty) element.GetValue(TargetPropertyProperty); + => (DependencyProperty)element.GetValue(TargetPropertyProperty); public BindingMode Mode { get; set; } public IValueConverter Converter { get; set; } - + public object ConverterParameter { get; set; } - + public object Source { get; set; } - + public override object ProvideValue(IServiceProvider serviceProvider) { if (_isInternalAction) return this; @@ -60,50 +60,48 @@ namespace HandyControl.Tools.Extension switch (Key) { case string key: - { - var binding = new Binding(key) { - Converter = Converter, - ConverterParameter = ConverterParameter, - UpdateSourceTrigger = UpdateSourceTrigger.Explicit, - Source = Source, - Mode = BindingMode.OneWay - }; - BindingOperations.SetBinding(targetObject, targetProperty, binding); - return binding.ProvideValue(serviceProvider); - } + var binding = new Binding(key) + { + Converter = Converter, + ConverterParameter = ConverterParameter, + UpdateSourceTrigger = UpdateSourceTrigger.Explicit, + Source = Source, + Mode = BindingMode.OneWay + }; + BindingOperations.SetBinding(targetObject, targetProperty, binding); + return binding.ProvideValue(serviceProvider); + } case Binding keyBinding when targetObject is FrameworkElement element: - { - if (element.DataContext != null) - { - _isInternalAction = true; - SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext); - _isInternalAction = false; - } - else { + if (element.DataContext != null) + { + _isInternalAction = true; + SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext); + _isInternalAction = false; + return element.GetValue(targetProperty); + } + SetTargetProperty(element, targetProperty); element.DataContextChanged += LangExtension_DataContextChanged; - } - break; - } + break; + } case Binding keyBinding when targetObject is FrameworkContentElement element: - { - if (element.DataContext != null) - { - _isInternalAction = true; - SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext); - _isInternalAction = false; - } - else { + if (element.DataContext != null) + { + _isInternalAction = true; + SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext); + _isInternalAction = false; + return element.GetValue(targetProperty); + } + SetTargetProperty(element, targetProperty); element.DataContextChanged += LangExtension_DataContextChanged; - } - break; - } + break; + } } return string.Empty; @@ -114,25 +112,25 @@ namespace HandyControl.Tools.Extension switch (sender) { case FrameworkElement element: - { - element.DataContextChanged -= LangExtension_DataContextChanged; - if (!(Key is Binding keyBinding)) return; + { + element.DataContextChanged -= LangExtension_DataContextChanged; + if (!(Key is Binding keyBinding)) return; - var targetProperty = GetTargetProperty(element); - SetTargetProperty(element, null); - SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext); - break; - } + var targetProperty = GetTargetProperty(element); + SetTargetProperty(element, null); + SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext); + break; + } case FrameworkContentElement element: - { - element.DataContextChanged -= LangExtension_DataContextChanged; - if (!(Key is Binding keyBinding)) return; + { + element.DataContextChanged -= LangExtension_DataContextChanged; + if (!(Key is Binding keyBinding)) return; - var targetProperty = GetTargetProperty(element); - SetTargetProperty(element, null); - SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext); - break; - } + var targetProperty = GetTargetProperty(element); + SetTargetProperty(element, null); + SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext); + break; + } } }