Ejemplo n.º 1
0
        private void SetTransition(TabPageView tab)
        {
            var behavior = TabViewAnimationTypeFactory.GetBehavior(this.TransitionType);

            behavior.SetBinding(SelectChangeBehaviorBase.IsSelectedProperty, new Binding("IsSelected", BindingMode.TwoWay, source: tab));
            tab.Content.Behaviors.Add(behavior);
        }
Ejemplo n.º 2
0
        private void UpdateSelected(TabPageView o)
        {
            if (o == null)
            {
                return;
            }

            this.IsInnerUpdate = true;

            var item = (TabPageView)o;

            if (item.Index == this.SelectedIndex &&
                item.BindingContext != null &&
                item.BindingContext.Equals(this.SelectedItem))
            {
                return;
            }

            if (this.CurrentTabPage != null)
            {
                this.CurrentTabPage.IsSelected = false;
                this.NotifySelected(this.CurrentTabPage.BindingContext, false);
            }


            item.IsSelected = true;
            if (item.BindingContext != null && !item.BindingContext.Equals(this.SelectedItem))
            {
                this.SelectedItem = item.BindingContext;
            }

            this.NotifySelected(item.BindingContext, true);

            if (item.Index != this.SelectedIndex)
            {
                this.SelectedIndex = item.Index;
            }

            this.CurrentTabPage = item;
            //IOS下,必须加上这一句,否则会导至 item 不可操作
            this.PageContainer.RaiseChild(item);

            this.IsInnerUpdate = false;
        }
Ejemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <param name="idx"></param>
        /// <returns></returns>
        private TabPageView GetTab(object data, int idx)
        {
            TabPageView item;

            if (data is TabPageView)
            {
                item = (TabPageView)data;
            }
            else
            {
                item = new TabPageView()
                {
                    Index          = idx,
                    BindingContext = data
                };

                #region headView
                View headView = null;

                if (this.TabTemplate != null || this.TabTemplateSelector != null)
                {
                    //优先使用 TemplateSelector
                    if (this.TabTemplateSelector != null)
                    {
                        // SelectTemplate 的第二个参数,即 TemplateSelector 的 OnSelectTemplate 方法的 container 参数
                        headView = (View)this.TabTemplateSelector.SelectTemplate(data, item).CreateContent();
                    }
                    else if (this.TabTemplate != null)
                    {
                        headView = (View)this.TabTemplate.CreateContent();
                    }

                    if (headView != null)
                    {
                        //上下文
                        headView.BindingContext = data;
                    }
                }

                if (headView == null)
                {
                    headView = new Label()
                    {
                        Text = "Tab"
                    }
                }
                ;


                //item.Header = headView;
                item.Header = new ContentView()
                {
                    Content        = headView,
                    BindingContext = item
                };

                //添加手势
                TapBinder.SetCmd(headView, this.TabSelectedCmd);
                TapBinder.SetParam(headView, item);
                #endregion

                #region bodyView
                View bodyView = null;
                if (this.ItemTemplate != null || this.ItemTemplateSelector != null)
                {
                    if (this.ItemTemplateSelector != null)
                    {
                        bodyView = (View)this.ItemTemplateSelector.SelectTemplate(data, item).CreateContent();
                    }
                    else if (this.ItemTemplate != null)
                    {
                        bodyView = (View)this.ItemTemplate.CreateContent();
                    }

                    if (bodyView != null)
                    {
                        bodyView.BindingContext = data;
                    }
                }
                if (bodyView == null)
                {
                    bodyView = new Label()
                    {
                        Text = "Body"
                    }
                }
                ;

                item.Content = bodyView;
                #endregion
            }


            item.Header.SetBinding(ContentView.ControlTemplateProperty, new Binding(nameof(this.TabControlTemplate), source: this));
            item.Header.SetBinding(View.WidthRequestProperty, new Binding("TabWidthRequest", source: this));
            item.Header.SetBinding(View.HeightRequestProperty, new Binding("TabHeightRequest", source: this));

            item.SetBinding(TabPageView.TabPositionProperty, new Binding(nameof(TabPosition), source: this));

            this.SetTransition(item);

            return(item);
        }