diff --git a/build/PackageDiffIgnore.xml b/build/PackageDiffIgnore.xml index 842b956bed03..402975ccdcc5 100644 --- a/build/PackageDiffIgnore.xml +++ b/build/PackageDiffIgnore.xml @@ -2940,6 +2940,9 @@ + + + @@ -2957,6 +2960,11 @@ + + + + + /// Gets or sets the name of the element to use as the binding source for the Binding. /// - /// The name of the element, or an ElementNameSubject instance that can be used to monitor the element name instance changes. - public object ElementName { get; set; } + /// The name of the element. + public string ElementName { get; set; } + + /// + /// Routes the availability of the element instance for a late-bound ElementName binding. + /// + /// + /// Uno-only seam set by the XAML code generator and runtime reader. It must be public + /// because the compiled-XAML output lives in the consuming assembly, which has no access + /// to Uno.UI internals (same rationale as ). + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public ElementNameSubject ElementNameSubject { get; set; } /// /// Gets or sets the value to use when the binding is unable to return a value. diff --git a/src/Uno.UI/UI/Xaml/DependencyPropertyDetailsCollection.cs b/src/Uno.UI/UI/Xaml/DependencyPropertyDetailsCollection.cs index 4c1f4513ae54..60cd23879c4a 100644 --- a/src/Uno.UI/UI/Xaml/DependencyPropertyDetailsCollection.cs +++ b/src/Uno.UI/UI/Xaml/DependencyPropertyDetailsCollection.cs @@ -75,6 +75,7 @@ internal void CloneToForHotReload(DependencyPropertyDetailsCollection other, Dep newBinding.Mode = binding.Mode; newBinding.TargetNullValue = binding.TargetNullValue; newBinding.ElementName = binding.ElementName; + newBinding.ElementNameSubject = binding.ElementNameSubject; newBinding.FallbackValue = binding.FallbackValue; if (binding.RelativeSource is { } relativeSource) { diff --git a/src/Uno.UI/UI/Xaml/Markup/Reader/XamlObjectBuilder.cs b/src/Uno.UI/UI/Xaml/Markup/Reader/XamlObjectBuilder.cs index 28fd855d4576..9f146d934edc 100644 --- a/src/Uno.UI/UI/Xaml/Markup/Reader/XamlObjectBuilder.cs +++ b/src/Uno.UI/UI/Xaml/Markup/Reader/XamlObjectBuilder.cs @@ -1202,7 +1202,7 @@ private Binding BuildBindingExpression(object? instance, object? rootInstance, X case nameof(Binding.ElementName): var subject = new ElementNameSubject(); - binding.ElementName = subject; + binding.ElementNameSubject = subject; if (bindingProperty.Value?.ToString() is { } value) { diff --git a/src/Uno.UI/UI/Xaml/Media/Animation/DoubleAnimation.cs b/src/Uno.UI/UI/Xaml/Media/Animation/DoubleAnimation.cs index c2330c79902a..fbe43dffd1dc 100644 --- a/src/Uno.UI/UI/Xaml/Media/Animation/DoubleAnimation.cs +++ b/src/Uno.UI/UI/Xaml/Media/Animation/DoubleAnimation.cs @@ -58,9 +58,9 @@ public bool EnableDependentAnimation public static DependencyProperty EnableDependentAnimationProperty { get; } = DependencyProperty.Register("EnableDependentAnimation", typeof(bool), typeof(DoubleAnimation), new FrameworkPropertyMetadata(false)); - public IEasingFunction EasingFunction + public EasingFunctionBase EasingFunction { - get => (IEasingFunction)GetValue(EasingFunctionProperty); + get => (EasingFunctionBase)GetValue(EasingFunctionProperty); set => SetValue(EasingFunctionProperty, value); } @@ -73,7 +73,7 @@ public IEasingFunction EasingFunction float? IAnimation.By => (float?)By; public static DependencyProperty EasingFunctionProperty { get; } = - DependencyProperty.Register("EasingFunction", typeof(IEasingFunction), typeof(DoubleAnimation), new FrameworkPropertyMetadata(null)); + DependencyProperty.Register("EasingFunction", typeof(EasingFunctionBase), typeof(DoubleAnimation), new FrameworkPropertyMetadata(null)); void ITimeline.Begin() => _animationImplementation.Begin(); diff --git a/src/Uno.WinAppSDKSyncGenerator/Helpers/SymbolMatchingHelpers.cs b/src/Uno.WinAppSDKSyncGenerator/Helpers/SymbolMatchingHelpers.cs index f01fa6f03141..5f0762b0669f 100644 --- a/src/Uno.WinAppSDKSyncGenerator/Helpers/SymbolMatchingHelpers.cs +++ b/src/Uno.WinAppSDKSyncGenerator/Helpers/SymbolMatchingHelpers.cs @@ -223,13 +223,7 @@ private static bool ArePropertiesMatching(IPropertySymbol uapProperty, IProperty // Property type of ContentTemplateRoot is diverging from UWP. // In Uno we use the native view for each platform Android.Views.View, UIKit.UIView, AppKit.NSView - if (!AreMatching(uapProperty.Type, unoProperty.Type) && uapProperty.Name != "ContentTemplateRoot" && - // object vs UIElement - uapProperty.Name != "Content" && - // IEasingFunction vs EasingFunctionBase - uapProperty.Name != "EasingFunction" && - // string vs object - uapProperty.Name != "ElementName") + if (!AreMatching(uapProperty.Type, unoProperty.Type) && uapProperty.Name != "ContentTemplateRoot") { return false; }