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);
|
=> element.SetValue(TargetPropertyProperty, value);
|
||||||
|
|
||||||
private static DependencyProperty GetTargetProperty(DependencyObject element)
|
private static DependencyProperty GetTargetProperty(DependencyObject element)
|
||||||
=> (DependencyProperty) element.GetValue(TargetPropertyProperty);
|
=> (DependencyProperty)element.GetValue(TargetPropertyProperty);
|
||||||
|
|
||||||
public BindingMode Mode { get; set; }
|
public BindingMode Mode { get; set; }
|
||||||
|
|
||||||
public IValueConverter Converter { get; set; }
|
public IValueConverter Converter { get; set; }
|
||||||
|
|
||||||
public object ConverterParameter { get; set; }
|
public object ConverterParameter { get; set; }
|
||||||
|
|
||||||
public object Source { get; set; }
|
public object Source { get; set; }
|
||||||
|
|
||||||
public override object ProvideValue(IServiceProvider serviceProvider)
|
public override object ProvideValue(IServiceProvider serviceProvider)
|
||||||
{
|
{
|
||||||
if (_isInternalAction) return this;
|
if (_isInternalAction) return this;
|
||||||
@@ -60,50 +60,48 @@ namespace HandyControl.Tools.Extension
|
|||||||
switch (Key)
|
switch (Key)
|
||||||
{
|
{
|
||||||
case string key:
|
case string key:
|
||||||
{
|
|
||||||
var binding = new Binding(key)
|
|
||||||
{
|
{
|
||||||
Converter = Converter,
|
var binding = new Binding(key)
|
||||||
ConverterParameter = ConverterParameter,
|
{
|
||||||
UpdateSourceTrigger = UpdateSourceTrigger.Explicit,
|
Converter = Converter,
|
||||||
Source = Source,
|
ConverterParameter = ConverterParameter,
|
||||||
Mode = BindingMode.OneWay
|
UpdateSourceTrigger = UpdateSourceTrigger.Explicit,
|
||||||
};
|
Source = Source,
|
||||||
BindingOperations.SetBinding(targetObject, targetProperty, binding);
|
Mode = BindingMode.OneWay
|
||||||
return binding.ProvideValue(serviceProvider);
|
};
|
||||||
}
|
BindingOperations.SetBinding(targetObject, targetProperty, binding);
|
||||||
|
return binding.ProvideValue(serviceProvider);
|
||||||
|
}
|
||||||
case Binding keyBinding when targetObject is FrameworkElement element:
|
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);
|
SetTargetProperty(element, targetProperty);
|
||||||
element.DataContextChanged += LangExtension_DataContextChanged;
|
element.DataContextChanged += LangExtension_DataContextChanged;
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Binding keyBinding when targetObject is FrameworkContentElement element:
|
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);
|
SetTargetProperty(element, targetProperty);
|
||||||
element.DataContextChanged += LangExtension_DataContextChanged;
|
element.DataContextChanged += LangExtension_DataContextChanged;
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
@@ -114,25 +112,25 @@ namespace HandyControl.Tools.Extension
|
|||||||
switch (sender)
|
switch (sender)
|
||||||
{
|
{
|
||||||
case FrameworkElement element:
|
case FrameworkElement element:
|
||||||
{
|
{
|
||||||
element.DataContextChanged -= LangExtension_DataContextChanged;
|
element.DataContextChanged -= LangExtension_DataContextChanged;
|
||||||
if (!(Key is Binding keyBinding)) return;
|
if (!(Key is Binding keyBinding)) return;
|
||||||
|
|
||||||
var targetProperty = GetTargetProperty(element);
|
var targetProperty = GetTargetProperty(element);
|
||||||
SetTargetProperty(element, null);
|
SetTargetProperty(element, null);
|
||||||
SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext);
|
SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FrameworkContentElement element:
|
case FrameworkContentElement element:
|
||||||
{
|
{
|
||||||
element.DataContextChanged -= LangExtension_DataContextChanged;
|
element.DataContextChanged -= LangExtension_DataContextChanged;
|
||||||
if (!(Key is Binding keyBinding)) return;
|
if (!(Key is Binding keyBinding)) return;
|
||||||
|
|
||||||
var targetProperty = GetTargetProperty(element);
|
var targetProperty = GetTargetProperty(element);
|
||||||
SetTargetProperty(element, null);
|
SetTargetProperty(element, null);
|
||||||
SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext);
|
SetLangBinding(element, targetProperty, keyBinding.Path, element.DataContext);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user