From 097eeb646fe83c6c9651ddd8110cdcc7a248825f Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 25 Feb 2020 16:21:34 +0100 Subject: [PATCH] Don't allow StyledElement.Styles to be set. It's not settable in Application and I can't see a reason it should be in `StyledElement`. Also add a `Styles` ctor that takes a parent. --- src/Avalonia.Controls/Application.cs | 3 +-- src/Avalonia.Styling/StyledElement.cs | 24 ++++--------------- src/Avalonia.Styling/Styling/Styles.cs | 6 +++++ .../StyledElementTests.cs | 22 ----------------- 4 files changed, 12 insertions(+), 43 deletions(-) diff --git a/src/Avalonia.Controls/Application.cs b/src/Avalonia.Controls/Application.cs index 0ae615fe23..d7b1aec0b7 100644 --- a/src/Avalonia.Controls/Application.cs +++ b/src/Avalonia.Controls/Application.cs @@ -167,8 +167,7 @@ namespace Avalonia { if (_styles == null) { - _styles = new Styles(); - ((ISetResourceParent)_styles).SetParent(this); + _styles = new Styles(this); _styles.ResourcesChanged += ThisResourcesChanged; } diff --git a/src/Avalonia.Styling/StyledElement.cs b/src/Avalonia.Styling/StyledElement.cs index e9e9ca4d5a..f15f38a5c0 100644 --- a/src/Avalonia.Styling/StyledElement.cs +++ b/src/Avalonia.Styling/StyledElement.cs @@ -215,29 +215,15 @@ namespace Avalonia /// public Styles Styles { - get { return _styles ?? (Styles = new Styles()); } - set + get { - Contract.Requires(value != null); - - if (_styles != value) + if (_styles == null) { - if (_styles != null) - { - (_styles as ISetResourceParent)?.SetParent(null); - _styles.ResourcesChanged -= ThisResourcesChanged; - } - - _styles = value; - - if (value is ISetResourceParent setParent && setParent.ResourceParent == null) - { - setParent.SetParent(this); - } - + _styles = new Styles(this); _styles.ResourcesChanged += ThisResourcesChanged; - NotifyResourcesChanged(new ResourcesChangedEventArgs()); } + + return _styles; } } diff --git a/src/Avalonia.Styling/Styling/Styles.cs b/src/Avalonia.Styling/Styling/Styles.cs index 1929c24017..bef4ef2ee0 100644 --- a/src/Avalonia.Styling/Styling/Styles.cs +++ b/src/Avalonia.Styling/Styling/Styles.cs @@ -61,6 +61,12 @@ namespace Avalonia.Styling () => { }); } + public Styles(IResourceNode parent) + : this() + { + _parent = parent; + } + public event NotifyCollectionChangedEventHandler CollectionChanged { add => _styles.CollectionChanged += value; diff --git a/tests/Avalonia.Styling.UnitTests/StyledElementTests.cs b/tests/Avalonia.Styling.UnitTests/StyledElementTests.cs index d349d9c3e0..c6c48f9aa8 100644 --- a/tests/Avalonia.Styling.UnitTests/StyledElementTests.cs +++ b/tests/Avalonia.Styling.UnitTests/StyledElementTests.cs @@ -543,28 +543,6 @@ namespace Avalonia.Styling.UnitTests Assert.Same(target, ((IResourceNode)target.Styles).ResourceParent); } - [Fact] - public void Assigned_Styles_Parent_Is_Set() - { - var styles = new Styles(); - var target = new TestControl { Styles = styles }; - - Assert.Same(target, ((IResourceNode)styles).ResourceParent); - } - - [Fact] - public void Assigning_Styles_Raises_ResourcesChanged() - { - var styles = new Styles { Resources = { { "foo", "bar" } } }; - var target = new TestControl(); - var raised = 0; - - target.ResourcesChanged += (s, e) => ++raised; - target.Styles = styles; - - Assert.Equal(1, raised); - } - [Fact] public void Changing_Parent_Notifies_Styles_ParentResourcesChanged() {