Browse Source

Make TemplatedParent inherit.

pull/4/head
Steven Kirk 12 years ago
parent
commit
b2806a77a9
  1. 1
      Perspex/Controls/ContentPresenter.cs
  2. 12
      Perspex/Controls/Control.cs
  3. 18
      Perspex/Controls/ControlTemplate.cs
  4. 14
      TestApplication/Program.cs

1
Perspex/Controls/ContentPresenter.cs

@ -83,6 +83,7 @@ namespace Perspex.Controls
if (this.visualChild != null) if (this.visualChild != null)
{ {
((IVisual)this.visualChild).VisualParent = this; ((IVisual)this.visualChild).VisualParent = this;
((Control)this.visualChild).TemplatedParent = null;
} }
} }

12
Perspex/Controls/Control.cs

@ -38,6 +38,9 @@ namespace Perspex.Controls
public static readonly PerspexProperty<Control> ParentProperty = public static readonly PerspexProperty<Control> ParentProperty =
PerspexProperty.Register<Control, Control>("Parent"); PerspexProperty.Register<Control, Control>("Parent");
public static readonly PerspexProperty<ITemplatedControl> TemplatedParentProperty =
PerspexProperty.Register<Control, ITemplatedControl>("TemplatedParent", inherits: true);
private Classes classes; private Classes classes;
private DataTemplates dataTemplates; private DataTemplates dataTemplates;
@ -172,8 +175,13 @@ namespace Perspex.Controls
public ITemplatedControl TemplatedParent public ITemplatedControl TemplatedParent
{ {
get; get
internal set; {
var val = this.GetValue(TemplatedParentProperty);
System.Diagnostics.Debug.WriteLine(val);
return val;
}
internal set { this.SetValue(TemplatedParentProperty, value); }
} }
ILogical ILogical.LogicalParent ILogical ILogical.LogicalParent

18
Perspex/Controls/ControlTemplate.cs

@ -34,24 +34,8 @@ namespace Perspex.Controls
Contract.Requires<NullReferenceException>(templatedParent != null); Contract.Requires<NullReferenceException>(templatedParent != null);
Control root = this.build(templatedParent); Control root = this.build(templatedParent);
this.SetTemplatedParent(root, templatedParent); root.TemplatedParent = templatedParent;
return root; return root;
} }
private void SetTemplatedParent(Control control, ITemplatedControl templatedParent)
{
Contract.Requires<NullReferenceException>(control != null);
Contract.Requires<NullReferenceException>(templatedParent != null);
control.TemplatedParent = templatedParent;
if (!(control is ContentPresenter))
{
foreach (Control child in ((IVisual)control).VisualChildren.OfType<Control>())
{
this.SetTemplatedParent(child, templatedParent);
}
}
}
} }
} }

14
TestApplication/Program.cs

@ -1,22 +1,10 @@
using System; using Perspex;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Reactive.Linq;
using System.Text;
using System.Threading.Tasks;
using Perspex;
using Perspex.Controls; using Perspex.Controls;
using Perspex.Input;
using Perspex.Layout; using Perspex.Layout;
using Perspex.Media; using Perspex.Media;
using Perspex.Media.Imaging; using Perspex.Media.Imaging;
using Perspex.Shapes;
using Perspex.Styling;
using Perspex.Themes.Default;
using Perspex.Threading; using Perspex.Threading;
using Perspex.Windows; using Perspex.Windows;
using Perspex.Windows.Threading;
using Splat; using Splat;
namespace TestApplication namespace TestApplication

Loading…
Cancel
Save