diff --git a/src/Avalonia.Base/AvaloniaObject.cs b/src/Avalonia.Base/AvaloniaObject.cs index bcce2080a6..e6d54727b3 100644 --- a/src/Avalonia.Base/AvaloniaObject.cs +++ b/src/Avalonia.Base/AvaloniaObject.cs @@ -587,6 +587,33 @@ namespace Avalonia } } + internal AvaloniaPropertyValue GetDiagnosticInternal(AvaloniaProperty property) + { + if (property.IsDirect) + { + return new AvaloniaPropertyValue( + property, + GetValue(property), + BindingPriority.Unset, + "Local Value"); + } + else if (_values != null) + { + var result = _values.GetDiagnostic(property); + + if (result != null) + { + return result; + } + } + + return new AvaloniaPropertyValue( + property, + GetValue(property), + BindingPriority.Unset, + "Unset"); + } + /// /// Logs a binding error for a property. /// diff --git a/src/Avalonia.Base/Diagnostics/AvaloniaObjectExtensions.cs b/src/Avalonia.Base/Diagnostics/AvaloniaObjectExtensions.cs index 4885f77d9c..d062856a73 100644 --- a/src/Avalonia.Base/Diagnostics/AvaloniaObjectExtensions.cs +++ b/src/Avalonia.Base/Diagnostics/AvaloniaObjectExtensions.cs @@ -22,36 +22,7 @@ namespace Avalonia.Diagnostics /// public static AvaloniaPropertyValue GetDiagnostic(this AvaloniaObject o, AvaloniaProperty property) { - throw new NotImplementedException(); - ////var set = o.GetSetValues(); - - ////if (set.TryGetValue(property, out var obj)) - ////{ - //// if (obj is PriorityValue value) - //// { - //// return new AvaloniaPropertyValue( - //// property, - //// o.GetValue(property), - //// (BindingPriority)value.ValuePriority, - //// value.GetDiagnostic()); - //// } - //// else - //// { - //// return new AvaloniaPropertyValue( - //// property, - //// obj, - //// BindingPriority.LocalValue, - //// "Local value"); - //// } - ////} - ////else - ////{ - //// return new AvaloniaPropertyValue( - //// property, - //// o.GetValue(property), - //// BindingPriority.Unset, - //// "Unset"); - ////} + return o.GetDiagnosticInternal(property); } } } diff --git a/src/Avalonia.Base/ValueStore.cs b/src/Avalonia.Base/ValueStore.cs index b63692a03b..44ee1c4c8f 100644 --- a/src/Avalonia.Base/ValueStore.cs +++ b/src/Avalonia.Base/ValueStore.cs @@ -129,6 +129,23 @@ namespace Avalonia } } + public Diagnostics.AvaloniaPropertyValue? GetDiagnostic(AvaloniaProperty property) + { + if (_values.TryGetValue(property, out var slot)) + { + if (slot is IValue value) + { + return new Diagnostics.AvaloniaPropertyValue( + property, + value.Value.HasValue ? (object)value.Value : AvaloniaProperty.UnsetValue, + value.ValuePriority, + null); + } + } + + return null; + } + void IValueSink.ValueChanged( StyledPropertyBase property, BindingPriority priority,