public void AddChildrenViews(IList <TabViewChildren> Children) { grid.Children.Clear(); grid.ColumnDefinitions.Clear(); Views.Clear(); RadioBehaviors.Clear(); for (int i = 0; i < Children.Count; ++i) { grid.ColumnDefinitions.Add(new ColumnDefinition()); RadioBehavior radioBehavior = new RadioBehavior() { IsChecked = i == 0 }; TabViewChildren children = Children[i]; Views.Add(children.View); RadioBehaviors.Add(radioBehavior); var tabbedView = new TabbedImageLabelView(children, radioBehavior) { Margin = new Thickness(0, 3, 0, 0), }; tabbedView.IndexSelectedChanged += (sendor, e) => { var view = sendor as TabbedImageLabelView; int index = RadioBehaviors.IndexOf(view.radioBehavior); SelectedChanged?.Invoke(this, new TabViewChangedEventArgs(index, ChildrenViews[index])); }; grid.Children.Add(tabbedView); viewGroup.Children.Add(children.View); SetColumn(tabbedView, i); } }
public TabbedImageLabelView(TabViewChildren tabViewChildren, RadioBehavior radioBehavior) { InitUI(); this.tabViewChildren = tabViewChildren; this.RadioBehavior = radioBehavior; this.Behaviors.Add(radioBehavior); this.grid.RowDefinitions[0].Height = tabViewChildren.ImageSize.Height; this.image.HeightRequest = tabViewChildren.ImageSize.Height; this.image.WidthRequest = tabViewChildren.ImageSize.Width; this.label.FontSize = tabViewChildren.TextFontSize; this.LabelColor = tabViewChildren.UnSelectTextColor; this.LabelText = tabViewChildren.Text; this.ImageSource = tabViewChildren.UnSelectImageSource; this.ColorFilter = tabViewChildren.UnSelectImageColorFilter; var dataTrigger = new DataTrigger(typeof(TabbedImageLabelView)) { Binding = new Binding("IsChecked", BindingMode.TwoWay) { Source = radioBehavior, Path = "IsChecked", }, Value = true, }; dataTrigger.Setters.Add(new Setter() { Property = LabelColorProperty, Value = tabViewChildren.SelectedTextColor }); dataTrigger.Setters.Add(new Setter() { Property = ImageSourceProperty, Value = tabViewChildren.SelectedImageSource, }); dataTrigger.Setters.Add(new Setter() { Property = ColorFilterProperty, Value = tabViewChildren.SelectedImageColorFilter, }); this.Triggers.Add(dataTrigger); tabViewChildren.View.SetBinding(IsVisibleProperty, new Binding() { Source = radioBehavior, Path = "IsChecked" }); }
public TabView(IList <TabViewChildren> Children) { InitializeComponent(); Views = new List <ContentView>(); RadioBehaviors = new List <RadioBehavior>(); //ItemsSource = new ObservableCollection<TabViewChildren>(); //ItemsSource.CollectionChanged += ItemsSource_CollectionChanged; for (int i = 0; i < Children.Count; ++i) { grid.ColumnDefinitions.Add(new ColumnDefinition()); RadioBehavior radioBehavior = new RadioBehavior() { IsChecked = i == 0 }; TabViewChildren children = Children[i]; Views.Add(children.View); RadioBehaviors.Add(radioBehavior); var tabbedView = new TabbedImageLabelView(children, radioBehavior) { Margin = new Thickness(0, 3, 0, 0), }; tabbedView.IndexSelectedChanged += (sendor, e) => { var view = sendor as TabbedImageLabelView; int index = RadioBehaviors.IndexOf(view.radioBehavior); SelectedChanged?.Invoke(this, new TabViewChangedEventArgs(index, Children[index].View)); }; grid.Children.Add(tabbedView); viewGroup.Children.Add(children.View); SetColumn(tabbedView, i); } }