fixed #377
This commit is contained in:
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user