From 2268227f20382ccb2f59a6a6cd1b0206eb0fe28c Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 17 Jun 2016 16:30:47 +0200 Subject: [PATCH] Make template instantiated by style a name scope. To do this had to move the name scope stuff into Avalonia.Styling. --- src/Avalonia.Controls/Avalonia.Controls.csproj | 4 ---- src/Avalonia.Styling/Avalonia.Styling.csproj | 8 ++++++++ .../Controls}/INameScope.cs | 0 .../Controls}/NameScope.cs | 6 +++--- .../Controls}/NameScopeEventArgs.cs | 0 .../Controls}/NameScopeExtensions.cs | 0 src/Avalonia.Styling/Styling/Setter.cs | 5 ++++- tests/Avalonia.Styling.UnitTests/SetterTests.cs | 13 +++++++++++++ 8 files changed, 28 insertions(+), 8 deletions(-) rename src/{Avalonia.Controls => Avalonia.Styling/Controls}/INameScope.cs (100%) rename src/{Avalonia.Controls => Avalonia.Styling/Controls}/NameScope.cs (93%) rename src/{Avalonia.Controls => Avalonia.Styling/Controls}/NameScopeEventArgs.cs (100%) rename src/{Avalonia.Controls => Avalonia.Styling/Controls}/NameScopeExtensions.cs (100%) diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj index c181aab1e2..3f8985aa12 100644 --- a/src/Avalonia.Controls/Avalonia.Controls.csproj +++ b/src/Avalonia.Controls/Avalonia.Controls.csproj @@ -56,7 +56,6 @@ - @@ -65,9 +64,6 @@ - - - diff --git a/src/Avalonia.Styling/Avalonia.Styling.csproj b/src/Avalonia.Styling/Avalonia.Styling.csproj index 6a32441ad6..5117aeb8c3 100644 --- a/src/Avalonia.Styling/Avalonia.Styling.csproj +++ b/src/Avalonia.Styling/Avalonia.Styling.csproj @@ -43,13 +43,17 @@ Properties\SharedAssemblyInfo.cs + + + + @@ -93,6 +97,10 @@ + + {d211e587-d8bc-45b9-95a4-f297c8fa5200} + Avalonia.Animation + {B09B78D8-9B26-48B0-9149-D64A2F120F3F} Avalonia.Base diff --git a/src/Avalonia.Controls/INameScope.cs b/src/Avalonia.Styling/Controls/INameScope.cs similarity index 100% rename from src/Avalonia.Controls/INameScope.cs rename to src/Avalonia.Styling/Controls/INameScope.cs diff --git a/src/Avalonia.Controls/NameScope.cs b/src/Avalonia.Styling/Controls/NameScope.cs similarity index 93% rename from src/Avalonia.Controls/NameScope.cs rename to src/Avalonia.Styling/Controls/NameScope.cs index aeba4158ef..ddfb3ea173 100644 --- a/src/Avalonia.Controls/NameScope.cs +++ b/src/Avalonia.Styling/Controls/NameScope.cs @@ -15,7 +15,7 @@ namespace Avalonia.Controls /// Defines the NameScope attached property. /// public static readonly AttachedProperty NameScopeProperty = - AvaloniaProperty.RegisterAttached("NameScope"); + AvaloniaProperty.RegisterAttached("NameScope"); private readonly Dictionary _inner = new Dictionary(); @@ -34,7 +34,7 @@ namespace Avalonia.Controls /// /// The visual. /// The value of the NameScope attached property. - public static INameScope GetNameScope(Control visual) + public static INameScope GetNameScope(Visual visual) { return visual.GetValue(NameScopeProperty); } @@ -44,7 +44,7 @@ namespace Avalonia.Controls /// /// The visual. /// The value to set. - public static void SetNameScope(Control visual, INameScope value) + public static void SetNameScope(Visual visual, INameScope value) { visual.SetValue(NameScopeProperty, value); } diff --git a/src/Avalonia.Controls/NameScopeEventArgs.cs b/src/Avalonia.Styling/Controls/NameScopeEventArgs.cs similarity index 100% rename from src/Avalonia.Controls/NameScopeEventArgs.cs rename to src/Avalonia.Styling/Controls/NameScopeEventArgs.cs diff --git a/src/Avalonia.Controls/NameScopeExtensions.cs b/src/Avalonia.Styling/Controls/NameScopeExtensions.cs similarity index 100% rename from src/Avalonia.Controls/NameScopeExtensions.cs rename to src/Avalonia.Styling/Controls/NameScopeExtensions.cs diff --git a/src/Avalonia.Styling/Styling/Setter.cs b/src/Avalonia.Styling/Styling/Setter.cs index 1d45f22b65..7f696a1f0a 100644 --- a/src/Avalonia.Styling/Styling/Setter.cs +++ b/src/Avalonia.Styling/Styling/Setter.cs @@ -4,6 +4,7 @@ using System; using System.Reactive.Disposables; using System.Reactive.Subjects; +using Avalonia.Controls; using Avalonia.Data; using Avalonia.Metadata; using Avalonia.Reactive; @@ -100,7 +101,9 @@ namespace Avalonia.Styling if (template != null) { - value = template.Build(); + var materialized = template.Build(); + NameScope.SetNameScope((Visual)materialized, new NameScope()); + value = materialized; } if (activator == null) diff --git a/tests/Avalonia.Styling.UnitTests/SetterTests.cs b/tests/Avalonia.Styling.UnitTests/SetterTests.cs index e6af3b2c0c..4de90b7790 100644 --- a/tests/Avalonia.Styling.UnitTests/SetterTests.cs +++ b/tests/Avalonia.Styling.UnitTests/SetterTests.cs @@ -48,5 +48,18 @@ namespace Avalonia.Styling.UnitTests Assert.IsType(control.Child); } + + [Fact] + public void Materializes_Template_Should_Be_NameScope() + { + var control = new Decorator(); + var template = new FuncTemplate(() => new Canvas()); + var style = Mock.Of(); + var setter = new Setter(Decorator.ChildProperty, template); + + setter.Apply(style, control, null); + + Assert.NotNull(NameScope.GetNameScope((Control)control.Child)); + } } }