Browse Source

Display control classes in DevTools.

pull/10/head
Steven Kirk 12 years ago
parent
commit
b9c865cd37
  1. 31
      Perspex.Diagnostics/DevTools.cs
  2. 7
      Perspex.Diagnostics/ViewModels/ControlDetails.cs
  3. 24
      Perspex.Diagnostics/ViewModels/VisualTreeNode.cs

31
Perspex.Diagnostics/DevTools.cs

@ -6,12 +6,13 @@
namespace Perspex.Diagnostics namespace Perspex.Diagnostics
{ {
using Perspex.Controls; using System;
using System.Reactive.Disposables;
using System.Reactive.Linq; using System.Reactive.Linq;
using Perspex.Controls;
using Perspex.Diagnostics.ViewModels; using Perspex.Diagnostics.ViewModels;
using System;
using Perspex.Input; using Perspex.Input;
using System.Reactive.Disposables; using ReactiveUI;
public class DevTools : Decorator public class DevTools : Decorator
{ {
@ -128,15 +129,23 @@ namespace Perspex.Diagnostics
private static Control GetHeader(VisualTreeNode node) private static Control GetHeader(VisualTreeNode node)
{ {
TextBlock result = new TextBlock(); return new StackPanel
result.Text = node.Type;
if (node.IsInTemplate)
{ {
result.FontStyle = Media.FontStyle.Italic; Orientation = Orientation.Horizontal,
} Gap = 8,
Children = new Controls
return result; {
new TextBlock
{
Text = node.Type,
FontStyle = node.IsInTemplate ? Media.FontStyle.Italic : Media.FontStyle.Normal,
},
new TextBlock
{
[!TextBlock.TextProperty] = node.WhenAnyValue(x => x.Classes),
}
}
};
} }
} }
} }

7
Perspex.Diagnostics/ViewModels/ControlDetails.cs

@ -8,6 +8,7 @@ namespace Perspex.Diagnostics.ViewModels
{ {
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Perspex.Styling;
using ReactiveUI; using ReactiveUI;
internal class ControlDetails : ReactiveObject internal class ControlDetails : ReactiveObject
@ -24,6 +25,12 @@ namespace Perspex.Diagnostics.ViewModels
} }
} }
public IEnumerable<string> Classes
{
get;
private set;
}
public IEnumerable<PropertyDetails> Properties public IEnumerable<PropertyDetails> Properties
{ {
get; get;

24
Perspex.Diagnostics/ViewModels/VisualTreeNode.cs

@ -6,11 +6,17 @@
namespace Perspex.Diagnostics.ViewModels namespace Perspex.Diagnostics.ViewModels
{ {
using System;
using System.Reactive;
using System.Reactive.Linq;
using Perspex.Controls; using Perspex.Controls;
using Perspex.Styling;
using ReactiveUI; using ReactiveUI;
internal class VisualTreeNode : ReactiveObject internal class VisualTreeNode : ReactiveObject
{ {
private string classes;
public VisualTreeNode(IVisual visual) public VisualTreeNode(IVisual visual)
{ {
this.Children = visual.VisualChildren.CreateDerivedCollection(x => new VisualTreeNode(x)); this.Children = visual.VisualChildren.CreateDerivedCollection(x => new VisualTreeNode(x));
@ -22,11 +28,29 @@ namespace Perspex.Diagnostics.ViewModels
if (control != null) if (control != null)
{ {
this.IsInTemplate = control.TemplatedParent != null; this.IsInTemplate = control.TemplatedParent != null;
control.Classes.Changed.Select(_ => Unit.Default).StartWith(Unit.Default).Subscribe(_ =>
{
if (control.Classes.Count > 0)
{
this.Classes = "(" + string.Join(" ", control.Classes) + ")";
}
else
{
this.Classes = "";
}
});
} }
} }
public IReactiveDerivedList<VisualTreeNode> Children { get; private set; } public IReactiveDerivedList<VisualTreeNode> Children { get; private set; }
public string Classes
{
get { return this.classes; }
private set { this.RaiseAndSetIfChanged(ref this.classes, value); }
}
public bool IsInTemplate { get; private set; } public bool IsInTemplate { get; private set; }
public string Type { get; private set; } public string Type { get; private set; }

Loading…
Cancel
Save