Browse Source

Make logical tree work for TabControl.

It only contains the currently visible tab - I'm not so happy about
this...
pull/39/head
Steven Kirk 12 years ago
parent
commit
7c09351939
  1. 2
      Perspex.Base/Collections/SingleItemPerspexList.cs
  2. 2
      Perspex.Controls/Presenters/ContentPresenter.cs
  3. 29
      Perspex.Controls/TabControl.cs
  4. 2
      Perspex.Themes.Default/TabItemStyle.cs

2
Perspex.Base/Collections/SingleItemPerspexList.cs

@ -80,7 +80,7 @@ namespace Perspex.Collections
}
else
{
e = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, value, this.item);
e = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, value, this.item, 0);
this.item = value;
}

2
Perspex.Controls/Presenters/ContentPresenter.cs

@ -32,7 +32,7 @@ namespace Perspex.Controls.Presenters
{
get
{
return this.Child;
return this.child;
}
private set

29
Perspex.Controls/TabControl.cs

@ -11,9 +11,10 @@ namespace Perspex.Controls
using System.Reactive.Linq;
using Perspex.Collections;
using Perspex.Controls.Generators;
using Perspex.Controls.Presenters;
using Perspex.Controls.Primitives;
public class TabControl : SelectingItemsControl
public class TabControl : SelectingItemsControl, ILogical
{
public static readonly PerspexProperty<object> SelectedContentProperty =
PerspexProperty.Register<TabControl, object>("SelectedContent");
@ -23,6 +24,12 @@ namespace Perspex.Controls
private TabStrip tabStrip;
private ContentPresenter presenter;
private IDisposable presenterSubscription;
private SingleItemPerspexList<ILogical> logicalChild = new SingleItemPerspexList<ILogical>();
public TabControl()
{
this.GetObservable(SelectedItemProperty).Subscribe(x =>
@ -49,6 +56,11 @@ namespace Perspex.Controls
private set { this.SetValue(SelectedTabProperty, value); }
}
IReadOnlyPerspexList<ILogical> ILogical.LogicalChildren
{
get { return this.logicalChild; }
}
protected override ItemContainerGenerator CreateItemContainerGenerator()
{
return new TypedItemContainerGenerator<TabItem>(this);
@ -56,7 +68,20 @@ namespace Perspex.Controls
protected override void OnTemplateApplied()
{
base.OnTemplateApplied();
if (this.presenterSubscription != null)
{
this.presenterSubscription.Dispose();
this.presenterSubscription = null;
}
this.presenter = this.FindTemplateChild<ContentPresenter>("contentPresenter");
if (this.presenter != null)
{
this.presenterSubscription = this.presenter.ChildObservable
.Subscribe(x => this.logicalChild.SingleItem = x);
}
this.tabStrip = this.GetTemplateControls().OfType<TabStrip>().FirstOrDefault();
this.BindTwoWay(TabControl.SelectedItemProperty, this.tabStrip, TabControl.SelectedItemProperty);
}

2
Perspex.Themes.Default/TabItemStyle.cs

@ -41,7 +41,7 @@ namespace Perspex.Themes.Default
{
return new ContentPresenter
{
Id = "contentPresenter",
Id = "headerPresenter",
[~ContentPresenter.ContentProperty] = control[~TabItem.HeaderProperty],
};
}

Loading…
Cancel
Save