Browse Source

Merge pull request #1629 from AvaloniaUI/fixes/1531-previewwith

Make Style an AvaloniaObject to fix Design.PreviewWith
pull/1634/merge
danwalmsley 8 years ago
committed by GitHub
parent
commit
df90011882
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      src/Avalonia.Controls/Design.cs
  2. 3
      src/Avalonia.DesignerSupport/DesignWindowLoader.cs
  3. 2
      src/Avalonia.Styling/Styling/Style.cs

18
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<object, Control> Substitutes = new ConditionalWeakTable<object, Control>();
public static readonly AttachedProperty<Control> PreviewWithProperty = AvaloniaProperty
.RegisterAttached<AvaloniaObject, Control>("PreviewWith", typeof (Design));
.RegisterAttached<Style, Control>("PreviewWith", typeof (Design));
public static void SetPreviewWith(object target, Control control)
public static void SetPreviewWith(Style target, Control control)
{
Substitutes.Remove(target);
Substitutes.Add(target, control);
target.SetValue(PreviewWithProperty, control);
}
public static Control GetPreviewWith(object target)
public static Control GetPreviewWith(Style target)
{
Control rv;
Substitutes.TryGetValue(target, out rv);
return rv;
return target.GetValue(PreviewWithProperty);
}
public static void ApplyDesignModeProperties(Control target, Control source)

3
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<Style>().Select(Design.GetPreviewWith).FirstOrDefault(s => s != null);
if (substitute != null)
{
substitute.Styles.AddRange(styles);

2
src/Avalonia.Styling/Styling/Style.cs

@ -15,7 +15,7 @@ namespace Avalonia.Styling
/// <summary>
/// Defines a style.
/// </summary>
public class Style : IStyle, ISetStyleParent
public class Style : AvaloniaObject, IStyle, ISetStyleParent
{
private static Dictionary<IStyleable, List<IDisposable>> _applied =
new Dictionary<IStyleable, List<IDisposable>>();

Loading…
Cancel
Save