From 4eec8b42715233343e13bb403f204b56a78c304e Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 29 May 2018 15:14:52 -0500 Subject: [PATCH 1/2] Fix #1531 by making IStyle an IAvaloniaObject. --- src/Avalonia.Controls/Design.cs | 18 +++++++----------- src/Avalonia.Styling/Styling/IStyle.cs | 2 +- src/Avalonia.Styling/Styling/Style.cs | 2 +- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/Avalonia.Controls/Design.cs b/src/Avalonia.Controls/Design.cs index ce52891749..3a67e554ac 100644 --- a/src/Avalonia.Controls/Design.cs +++ b/src/Avalonia.Controls/Design.cs @@ -1,5 +1,6 @@ using System.Runtime.CompilerServices; +using Avalonia.Styling; namespace Avalonia.Controls { @@ -45,23 +46,18 @@ namespace Avalonia.Controls { return control.GetValue(DataContextProperty); } - - static readonly ConditionalWeakTable Substitutes = new ConditionalWeakTable(); - + public static readonly AttachedProperty PreviewWithProperty = AvaloniaProperty - .RegisterAttached("PreviewWith", typeof (Design)); + .RegisterAttached("PreviewWith", typeof (Design)); - public static void SetPreviewWith(object target, Control control) + public static void SetPreviewWith(IStyle target, Control control) { - Substitutes.Remove(target); - Substitutes.Add(target, control); + target.SetValue(PreviewWithProperty, control); } - public static Control GetPreviewWith(object target) + public static Control GetPreviewWith(IStyle target) { - Control rv; - Substitutes.TryGetValue(target, out rv); - return rv; + return target.GetValue(PreviewWithProperty); } public static void ApplyDesignModeProperties(Control target, Control source) diff --git a/src/Avalonia.Styling/Styling/IStyle.cs b/src/Avalonia.Styling/Styling/IStyle.cs index 5f12763825..2ce06cc36c 100644 --- a/src/Avalonia.Styling/Styling/IStyle.cs +++ b/src/Avalonia.Styling/Styling/IStyle.cs @@ -8,7 +8,7 @@ namespace Avalonia.Styling /// /// Defines the interface for styles. /// - public interface IStyle : IResourceNode + public interface IStyle : IAvaloniaObject, IResourceNode { /// /// Attaches the style to a control if the style's selector matches. diff --git a/src/Avalonia.Styling/Styling/Style.cs b/src/Avalonia.Styling/Styling/Style.cs index 88ff695ba2..203f679683 100644 --- a/src/Avalonia.Styling/Styling/Style.cs +++ b/src/Avalonia.Styling/Styling/Style.cs @@ -15,7 +15,7 @@ namespace Avalonia.Styling /// /// Defines a style. /// - public class Style : IStyle, ISetStyleParent + public class Style : AvaloniaObject, IStyle, ISetStyleParent { private static Dictionary> _applied = new Dictionary>(); From 1bbc155303dbcdaffec3d8f36356e2467ba9fd99 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 29 May 2018 15:35:08 -0500 Subject: [PATCH 2/2] Use a concrete type for the host type to avoid #959. --- src/Avalonia.Controls/Design.cs | 6 +++--- src/Avalonia.DesignerSupport/DesignWindowLoader.cs | 3 +-- src/Avalonia.Styling/Styling/IStyle.cs | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Avalonia.Controls/Design.cs b/src/Avalonia.Controls/Design.cs index 3a67e554ac..894240a09f 100644 --- a/src/Avalonia.Controls/Design.cs +++ b/src/Avalonia.Controls/Design.cs @@ -48,14 +48,14 @@ namespace Avalonia.Controls } public static readonly AttachedProperty PreviewWithProperty = AvaloniaProperty - .RegisterAttached("PreviewWith", typeof (Design)); + .RegisterAttached("PreviewWith", typeof (Design)); - public static void SetPreviewWith(IStyle target, Control control) + public static void SetPreviewWith(Style target, Control control) { target.SetValue(PreviewWithProperty, control); } - public static Control GetPreviewWith(IStyle target) + public static Control GetPreviewWith(Style target) { return target.GetValue(PreviewWithProperty); } diff --git a/src/Avalonia.DesignerSupport/DesignWindowLoader.cs b/src/Avalonia.DesignerSupport/DesignWindowLoader.cs index d1958ac9bf..6dca479d38 100644 --- a/src/Avalonia.DesignerSupport/DesignWindowLoader.cs +++ b/src/Avalonia.DesignerSupport/DesignWindowLoader.cs @@ -36,8 +36,7 @@ namespace Avalonia.DesignerSupport var styles = loaded as Styles; if (styles != null) { - var substitute = Design.GetPreviewWith(styles) ?? - styles.Select(Design.GetPreviewWith).FirstOrDefault(s => s != null); + var substitute = styles.OfType