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); }
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; }
/// <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); }