This commit is contained in:
NaBian committed 2020-04-27 22:46:22 +08:00
1 parent 12689384a5
commit 3eb802d4e3
1 file changed
+51 -53
@@ -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;
}
}
}