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,