// ----------------------------------------------------------------------- // // Copyright 2014 MIT Licence. See licence.md for more information. // // ----------------------------------------------------------------------- namespace Perspex.Controls { using System; using System.Reactive.Linq; using Perspex.Animation; using Perspex.Collections; using Perspex.Controls.Primitives; using Perspex.Controls.Templates; using Perspex.Input; public class TabControl : SelectingItemsControl, ILogical { public static readonly PerspexProperty SelectedContentProperty = PerspexProperty.Register("SelectedContent"); public static readonly PerspexProperty SelectedTabProperty = PerspexProperty.Register("SelectedTab"); public static readonly PerspexProperty TransitionProperty = Deck.TransitionProperty.AddOwner(); private PerspexReadOnlyListView logicalChildren = new PerspexReadOnlyListView(); static TabControl() { FocusableProperty.OverrideDefaultValue(typeof(TabControl), false); } public TabControl() { this.BindTwoWay(SelectedTabProperty, this, SelectingItemsControl.SelectedItemProperty); this.GetObservable(SelectedItemProperty).Subscribe(x => { ContentControl c = x as ContentControl; object content = (c != null) ? c.Content : c; this.SetValue(SelectedTabProperty, x); this.SetValue(SelectedContentProperty, content); }); } public object SelectedContent { get { return this.GetValue(SelectedContentProperty); } set { this.SetValue(SelectedContentProperty, value); } } public TabItem SelectedTab { get { return this.GetValue(SelectedTabProperty); } set { this.SetValue(SelectedTabProperty, value); } } public IPageTransition Transition { get { return this.GetValue(TransitionProperty); } set { this.SetValue(TransitionProperty, value); } } IPerspexReadOnlyList ILogical.LogicalChildren { get { return this.logicalChildren; } } protected override void OnKeyDown(KeyEventArgs e) { // Don't handle keypresses. } Deck deck; protected override void OnTemplateApplied() { base.OnTemplateApplied(); this.deck = this.GetTemplateChild("deck"); this.logicalChildren.Source = ((ILogical)deck).LogicalChildren; } } }