BarBackgroundColor and BarTextColor on TabbedPage (#96)
* [Core] Add properties to TabbedPage * [Controls] Add properties to test page * [iOS] Added BarBackgroundColor & BarTextColor to TabbedPage * [A] Added BarBackgroundColor & BarTextColor to TabbedPage * [UWP] Added BarBackgroundColor & BarTextColor to TabbedPage * [WinRT] Format file * [WinRT] Added BarBackgroundColor & BarTextColor to TabbedPage * [Docs] Updated docs
This commit is contained in:
Родитель
fc05a57e9d
Коммит
75f1124002
|
@ -78,40 +78,45 @@ namespace Xamarin.Forms.Controls
|
|||
{
|
||||
protected override void Init ()
|
||||
{
|
||||
|
||||
}
|
||||
#if APP
|
||||
public CoreTabbedPage ()
|
||||
{
|
||||
AutomationId = "TabbedPageRoot";
|
||||
Children.Add (new CoreRootPage (this, NavigationBehavior.PushModalAsync) { Title = "Tab 1" });
|
||||
Children.Add (new CoreRootPage (this, NavigationBehavior.PushModalAsync) { Title = "Tab 2" });
|
||||
|
||||
BarBackgroundColor = Color.Maroon;
|
||||
BarTextColor = Color.White;
|
||||
|
||||
Children.Add(new CoreRootPage(this, NavigationBehavior.PushModalAsync) { Title = "Tab 1" });
|
||||
Children.Add(new CoreRootPage(this, NavigationBehavior.PushModalAsync) { Title = "Tab 2" });
|
||||
Children.Add(new NavigationPage(new Page())
|
||||
{
|
||||
Title = "Rubriques",
|
||||
Icon = "coffee.png",
|
||||
BarBackgroundColor = Color.Blue
|
||||
});
|
||||
|
||||
Children.Add(new NavigationPage(new Page())
|
||||
{
|
||||
Title = "Le Club",
|
||||
Title = "Le Club"
|
||||
});
|
||||
|
||||
Children.Add(new NavigationPage(new Page{Title = "Bookmarks"})
|
||||
Children.Add(new NavigationPage(new Page { Title = "Bookmarks" })
|
||||
{
|
||||
Title = "Bookmarks",
|
||||
});
|
||||
|
||||
Children.Add(new NavigationPage(new Page() { Title = "Alertes" })
|
||||
Children.Add(new NavigationPage(new Page { Title = "Alertes" })
|
||||
{
|
||||
Title = "Notifications",
|
||||
});
|
||||
|
||||
Children.Add(new NavigationPage (new Page(){Title = "My account"})
|
||||
Children.Add(new NavigationPage(new Page { Title = "My account" })
|
||||
{
|
||||
Title = "My account",
|
||||
});
|
||||
|
||||
Children.Add(new NavigationPage(new Page(){Title = "About"})
|
||||
Children.Add(new NavigationPage(new Page { Title = "About" })
|
||||
{
|
||||
Title = "About",
|
||||
});
|
||||
|
|
|
@ -5,6 +5,34 @@ namespace Xamarin.Forms
|
|||
[RenderWith(typeof(_TabbedPageRenderer))]
|
||||
public class TabbedPage : MultiPage<Page>
|
||||
{
|
||||
public static readonly BindableProperty BarBackgroundColorProperty = BindableProperty.Create(nameof(BarBackgroundColor), typeof(Color), typeof(TabbedPage), Color.Default);
|
||||
|
||||
public static readonly BindableProperty BarTextColorProperty = BindableProperty.Create(nameof(BarTextColor), typeof(Color), typeof(TabbedPage), Color.Default);
|
||||
|
||||
public Color BarBackgroundColor
|
||||
{
|
||||
get
|
||||
{
|
||||
return (Color)GetValue(BarBackgroundColorProperty);
|
||||
}
|
||||
set
|
||||
{
|
||||
SetValue(BarBackgroundColorProperty, value);
|
||||
}
|
||||
}
|
||||
|
||||
public Color BarTextColor
|
||||
{
|
||||
get
|
||||
{
|
||||
return (Color)GetValue(BarTextColorProperty);
|
||||
}
|
||||
set
|
||||
{
|
||||
SetValue(BarTextColorProperty, value);
|
||||
}
|
||||
}
|
||||
|
||||
protected override Page CreateDefault(object item)
|
||||
{
|
||||
var page = new Page();
|
||||
|
|
|
@ -2,6 +2,9 @@ using System;
|
|||
using System.Collections.Specialized;
|
||||
using System.ComponentModel;
|
||||
using Android.Content;
|
||||
using Android.Content.Res;
|
||||
using Android.Graphics;
|
||||
using Android.Graphics.Drawables;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using Android.Support.Design.Widget;
|
||||
|
@ -13,6 +16,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
|
|||
{
|
||||
public class TabbedPageRenderer : VisualElementRenderer<TabbedPage>, TabLayout.IOnTabSelectedListener, ViewPager.IOnPageChangeListener, IManageFragments
|
||||
{
|
||||
Drawable _backgroundDrawable;
|
||||
bool _disposed;
|
||||
FragmentManager _fragmentManager;
|
||||
TabLayout _tabLayout;
|
||||
|
@ -149,7 +153,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
|
|||
tabs = _tabLayout = new TabLayout(activity) { TabMode = TabLayout.ModeFixed, TabGravity = TabLayout.GravityFill };
|
||||
FormsViewPager pager =
|
||||
_viewPager =
|
||||
new FormsViewPager(activity)
|
||||
new FormsViewPager(activity)
|
||||
{
|
||||
OverScrollMode = OverScrollMode.Never,
|
||||
EnableGesture = UseAnimations,
|
||||
|
@ -173,6 +177,8 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
|
|||
|
||||
UpdateIgnoreContainerAreas();
|
||||
tabbedPage.InternalChildren.CollectionChanged += OnChildrenCollectionChanged;
|
||||
UpdateBarBackgroundColor();
|
||||
UpdateBarTextColor();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -180,8 +186,12 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
|
|||
{
|
||||
base.OnElementPropertyChanged(sender, e);
|
||||
|
||||
if (e.PropertyName == "CurrentPage")
|
||||
if (e.PropertyName == nameof(TabbedPage.CurrentPage))
|
||||
ScrollToCurrentPage();
|
||||
else if (e.PropertyName == NavigationPage.BarBackgroundColorProperty.PropertyName)
|
||||
UpdateBarBackgroundColor();
|
||||
else if (e.PropertyName == NavigationPage.BarTextColorProperty.PropertyName)
|
||||
UpdateBarTextColor();
|
||||
}
|
||||
|
||||
protected override void OnLayout(bool changed, int l, int t, int r, int b)
|
||||
|
@ -318,5 +328,45 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
|
|||
tab.SetIcon(ResourceManager.IdFromTitle(icon, ResourceManager.DrawableClass));
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateBarBackgroundColor()
|
||||
{
|
||||
if (_disposed || _tabLayout == null)
|
||||
return;
|
||||
|
||||
Color tintColor = Element.BarBackgroundColor;
|
||||
|
||||
if (Forms.IsLollipopOrNewer)
|
||||
{
|
||||
if (tintColor.IsDefault)
|
||||
_tabLayout.BackgroundTintMode = null;
|
||||
else
|
||||
{
|
||||
_tabLayout.BackgroundTintMode = PorterDuff.Mode.Src;
|
||||
_tabLayout.BackgroundTintList = ColorStateList.ValueOf(tintColor.ToAndroid());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tintColor.IsDefault && _backgroundDrawable != null)
|
||||
_tabLayout.SetBackground(_backgroundDrawable);
|
||||
else if (!tintColor.IsDefault)
|
||||
{
|
||||
if (_backgroundDrawable == null)
|
||||
_backgroundDrawable = _tabLayout.Background;
|
||||
_tabLayout.SetBackgroundColor(tintColor.ToAndroid());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateBarTextColor()
|
||||
{
|
||||
if (_disposed || _tabLayout == null)
|
||||
return;
|
||||
|
||||
var textColor = Element.BarTextColor.ToAndroid().ToArgb();
|
||||
|
||||
_tabLayout.SetTabTextColors(textColor, textColor);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -238,7 +238,9 @@
|
|||
<Setter Property="ContentTemplate">
|
||||
<Setter.Value>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding}" Margin="10,0,0,0" VerticalAlignment="Center" Style="{ThemeResource TitleTextBlockStyle}" />
|
||||
<Grid Background="{Binding ToolbarBackground}">
|
||||
<TextBlock Text="{Binding}" Margin="10,0,0,0" VerticalAlignment="Center" Style="{ThemeResource TitleTextBlockStyle}" Foreground="{Binding ToolbarForeground}" />
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
|
@ -471,7 +473,7 @@
|
|||
<Setter Property="HeaderTemplate">
|
||||
<Setter.Value>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Title}" Style="{ThemeResource BodyTextBlockStyle}" />
|
||||
<TextBlock Text="{Binding Title}" Foreground="{Binding ToolbarForeground}" Style="{ThemeResource BodyTextBlockStyle}" />
|
||||
</DataTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
|
@ -616,7 +618,7 @@
|
|||
<ContentControl.Clip>
|
||||
<RectangleGeometry x:Name="HeaderClipperGeometry"/>
|
||||
</ContentControl.Clip>
|
||||
<Grid Background="Transparent">
|
||||
<Grid Background="{TemplateBinding ToolbarBackground}">
|
||||
<PivotHeaderPanel x:Name="StaticHeader" Visibility="Collapsed"/>
|
||||
<PivotHeaderPanel x:Name="Header">
|
||||
<PivotHeaderPanel.RenderTransform>
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace Xamarin.Forms.Platform.UWP
|
|||
{
|
||||
Loaded += TabbedPagePresenter_Loaded;
|
||||
Unloaded += TabbedPagePresenter_Unloaded;
|
||||
SizeChanged += (s, e) =>
|
||||
SizeChanged += (s, e) =>
|
||||
{
|
||||
if (ActualWidth > 0 && ActualHeight > 0)
|
||||
{
|
||||
|
@ -44,7 +44,7 @@ namespace Xamarin.Forms.Platform.UWP
|
|||
bool _showTitle;
|
||||
VisualElementTracker<Page, Pivot> _tracker;
|
||||
|
||||
public Pivot Control { get; private set; }
|
||||
public FormsPivot Control { get; private set; }
|
||||
|
||||
public TabbedPage Element { get; private set; }
|
||||
|
||||
|
@ -157,7 +157,7 @@ namespace Xamarin.Forms.Platform.UWP
|
|||
{
|
||||
if (Control == null)
|
||||
{
|
||||
Control = new FormsPivot { Style = (Windows.UI.Xaml.Style)Windows.UI.Xaml.Application.Current.Resources["TabbedPageStyle"] };
|
||||
Control = new FormsPivot { Style = (Windows.UI.Xaml.Style)Windows.UI.Xaml.Application.Current.Resources["TabbedPageStyle"], };
|
||||
|
||||
Control.SelectionChanged += OnSelectionChanged;
|
||||
|
||||
|
@ -170,6 +170,8 @@ namespace Xamarin.Forms.Platform.UWP
|
|||
Control.DataContext = Element;
|
||||
OnPagesChanged(Element.Children, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
|
||||
UpdateCurrentPage();
|
||||
UpdateBarTextColor();
|
||||
UpdateBarBackgroundColor();
|
||||
|
||||
((INotifyCollectionChanged)Element.Children).CollectionChanged += OnPagesChanged;
|
||||
element.PropertyChanged += OnElementPropertyChanged;
|
||||
|
@ -178,6 +180,7 @@ namespace Xamarin.Forms.Platform.UWP
|
|||
Control.SetValue(AutomationProperties.AutomationIdProperty, element.AutomationId);
|
||||
}
|
||||
|
||||
|
||||
OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));
|
||||
}
|
||||
|
||||
|
@ -201,8 +204,13 @@ namespace Xamarin.Forms.Platform.UWP
|
|||
|
||||
void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == "CurrentPage")
|
||||
if (e.PropertyName == nameof(TabbedPage.CurrentPage))
|
||||
UpdateCurrentPage();
|
||||
else if (e.PropertyName == TabbedPage.BarTextColorProperty.PropertyName)
|
||||
UpdateBarTextColor();
|
||||
else if (e.PropertyName == TabbedPage.BarBackgroundColorProperty.PropertyName)
|
||||
UpdateBarBackgroundColor();
|
||||
|
||||
}
|
||||
|
||||
void OnLoaded(object sender, RoutedEventArgs args)
|
||||
|
@ -243,6 +251,32 @@ namespace Xamarin.Forms.Platform.UWP
|
|||
Element.SendDisappearing();
|
||||
}
|
||||
|
||||
Brush GetBarBackgroundBrush()
|
||||
{
|
||||
object defaultColor = Windows.UI.Xaml.Application.Current.Resources["SystemControlBackgroundChromeMediumLowBrush"];
|
||||
if (Element.BarBackgroundColor.IsDefault && defaultColor != null)
|
||||
return (Brush)defaultColor;
|
||||
return Element.BarBackgroundColor.ToBrush();
|
||||
}
|
||||
|
||||
Brush GetBarForegroundBrush()
|
||||
{
|
||||
object defaultColor = Windows.UI.Xaml.Application.Current.Resources["ApplicationForegroundThemeBrush"];
|
||||
if (Element.BarTextColor.IsDefault)
|
||||
return (Brush)defaultColor;
|
||||
return Element.BarTextColor.ToBrush();
|
||||
}
|
||||
|
||||
void UpdateBarBackgroundColor()
|
||||
{
|
||||
Control.ToolbarBackground = GetBarBackgroundBrush();
|
||||
}
|
||||
|
||||
void UpdateBarTextColor()
|
||||
{
|
||||
Control.ToolbarForeground = GetBarForegroundBrush();
|
||||
}
|
||||
|
||||
void UpdateBarVisibility()
|
||||
{
|
||||
(Control as FormsPivot).ToolbarVisibility = _showTitle ? Visibility.Visible : Visibility.Collapsed;
|
||||
|
@ -255,6 +289,9 @@ namespace Xamarin.Forms.Platform.UWP
|
|||
var nav = page as NavigationPage;
|
||||
((ITitleProvider)this).ShowTitle = nav != null;
|
||||
|
||||
UpdateBarTextColor();
|
||||
UpdateBarBackgroundColor();
|
||||
|
||||
if (page == null)
|
||||
return;
|
||||
|
||||
|
|
|
@ -242,7 +242,7 @@
|
|||
<Setter Property="HeaderTemplate">
|
||||
<Setter.Value>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Title}" />
|
||||
<TextBlock Text="{Binding Title}" Foreground="{TemplateBinding ToolbarForeground}" />
|
||||
</DataTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
|
@ -281,7 +281,7 @@
|
|||
</Grid>
|
||||
<ScrollViewer x:Name="ScrollViewer" HorizontalSnapPointsAlignment="Center" HorizontalSnapPointsType="MandatorySingle" HorizontalScrollBarVisibility="Hidden" Margin="{TemplateBinding Padding}" Grid.Row="1" Template="{StaticResource ScrollViewerScrollBarlessTemplate}" VerticalSnapPointsType="None" VerticalScrollBarVisibility="Disabled" VerticalScrollMode="Disabled" VerticalContentAlignment="Stretch" ZoomMode="Disabled">
|
||||
<PivotPanel x:Name="Panel" VerticalAlignment="Stretch">
|
||||
<PivotHeaderPanel x:Name="Header">
|
||||
<PivotHeaderPanel x:Name="Header" Background="{TemplateBinding ToolbarBackground}">
|
||||
<PivotHeaderPanel.RenderTransform>
|
||||
<CompositeTransform x:Name="HeaderTranslateTransform" TranslateX="0"/>
|
||||
</PivotHeaderPanel.RenderTransform>
|
||||
|
|
|
@ -8,14 +8,15 @@ using Windows.UI.Xaml.Media;
|
|||
|
||||
namespace Xamarin.Forms.Platform.WinRT
|
||||
{
|
||||
internal class TabbedPagePresenter : Windows.UI.Xaml.Controls.ContentPresenter
|
||||
internal class TabbedPagePresenter : Windows.UI.Xaml.Controls.ContentPresenter
|
||||
{
|
||||
public TabbedPagePresenter ()
|
||||
public TabbedPagePresenter()
|
||||
{
|
||||
SizeChanged += (s, e) => {
|
||||
if (ActualWidth > 0 && ActualHeight > 0) {
|
||||
var tab = ((Page) DataContext);
|
||||
((TabbedPage) tab.RealParent).ContainerArea = new Rectangle (0, 0, ActualWidth, ActualHeight);
|
||||
if (ActualWidth > 0 && ActualHeight > 0)
|
||||
{
|
||||
var tab = ((Page)DataContext);
|
||||
((TabbedPage)tab.RealParent).ContainerArea = new Rectangle(0, 0, ActualWidth, ActualHeight);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -36,7 +37,7 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
get { return Element; }
|
||||
}
|
||||
|
||||
public Pivot Control
|
||||
public FormsPivot Control
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
|
@ -48,31 +49,34 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
private set;
|
||||
}
|
||||
|
||||
public void SetElement (VisualElement element)
|
||||
public void SetElement(VisualElement element)
|
||||
{
|
||||
if (element != null && !(element is TabbedPage))
|
||||
throw new ArgumentException ("Element must be a TabbedPage", "element");
|
||||
throw new ArgumentException("Element must be a TabbedPage", "element");
|
||||
|
||||
TabbedPage oldElement = Element;
|
||||
Element = (TabbedPage) element;
|
||||
Element = (TabbedPage)element;
|
||||
|
||||
if (oldElement != null) {
|
||||
if (oldElement != null)
|
||||
{
|
||||
oldElement.PropertyChanged -= OnElementPropertyChanged;
|
||||
((INotifyCollectionChanged) oldElement.Children).CollectionChanged -= OnPagesChanged;
|
||||
((INotifyCollectionChanged)oldElement.Children).CollectionChanged -= OnPagesChanged;
|
||||
}
|
||||
|
||||
if (element != null) {
|
||||
if (Control == null) {
|
||||
if (element != null)
|
||||
{
|
||||
if (Control == null)
|
||||
{
|
||||
Control = new FormsPivot {
|
||||
Style = (Windows.UI.Xaml.Style) Windows.UI.Xaml.Application.Current.Resources["TabbedPageStyle"]
|
||||
Style = (Windows.UI.Xaml.Style)Windows.UI.Xaml.Application.Current.Resources["TabbedPageStyle"]
|
||||
};
|
||||
Control.HeaderTemplate = (Windows.UI.Xaml.DataTemplate)Windows.UI.Xaml.Application.Current.Resources["TabbedPageHeader"];
|
||||
Control.ItemTemplate = (Windows.UI.Xaml.DataTemplate)Windows.UI.Xaml.Application.Current.Resources["TabbedPage"];
|
||||
|
||||
Control.SelectionChanged += OnSelectionChanged;
|
||||
|
||||
Tracker = new BackgroundTracker<Pivot> (Windows.UI.Xaml.Controls.Control.BackgroundProperty) {
|
||||
Element = (Page) element,
|
||||
Tracker = new BackgroundTracker<Pivot>(Windows.UI.Xaml.Controls.Control.BackgroundProperty) {
|
||||
Element = (Page)element,
|
||||
Control = Control,
|
||||
Container = Control
|
||||
};
|
||||
|
@ -82,22 +86,24 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
}
|
||||
|
||||
Control.DataContext = Element;
|
||||
OnPagesChanged (Element.Children, new NotifyCollectionChangedEventArgs (NotifyCollectionChangedAction.Reset));
|
||||
UpdateCurrentPage ();
|
||||
|
||||
((INotifyCollectionChanged) Element.Children).CollectionChanged += OnPagesChanged;
|
||||
OnPagesChanged(Element.Children, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
|
||||
UpdateCurrentPage();
|
||||
UpdateBarTextColor();
|
||||
UpdateBarBackgroundColor();
|
||||
|
||||
((INotifyCollectionChanged)Element.Children).CollectionChanged += OnPagesChanged;
|
||||
element.PropertyChanged += OnElementPropertyChanged;
|
||||
|
||||
if (!string.IsNullOrEmpty (element.AutomationId))
|
||||
Control.SetValue (AutomationProperties.AutomationIdProperty, element.AutomationId);
|
||||
if (!string.IsNullOrEmpty(element.AutomationId))
|
||||
Control.SetValue(AutomationProperties.AutomationIdProperty, element.AutomationId);
|
||||
}
|
||||
|
||||
OnElementChanged (new VisualElementChangedEventArgs (oldElement, element));
|
||||
OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));
|
||||
}
|
||||
|
||||
public SizeRequest GetDesiredSize (double widthConstraint, double heightConstraint)
|
||||
public SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint)
|
||||
{
|
||||
var constraint = new Windows.Foundation.Size (widthConstraint, heightConstraint);
|
||||
var constraint = new Windows.Foundation.Size(widthConstraint, heightConstraint);
|
||||
|
||||
var oldWidth = Control.Width;
|
||||
var oldHeight = Control.Height;
|
||||
|
@ -105,27 +111,27 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
Control.Height = double.NaN;
|
||||
Control.Width = double.NaN;
|
||||
|
||||
Control.Measure (constraint);
|
||||
var result = new Size (Math.Ceiling (Control.DesiredSize.Width), Math.Ceiling (Control.DesiredSize.Height));
|
||||
Control.Measure(constraint);
|
||||
var result = new Size(Math.Ceiling(Control.DesiredSize.Width), Math.Ceiling(Control.DesiredSize.Height));
|
||||
|
||||
Control.Width = oldWidth;
|
||||
Control.Height = oldHeight;
|
||||
|
||||
return new SizeRequest (result);
|
||||
return new SizeRequest(result);
|
||||
}
|
||||
|
||||
public void Dispose ()
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose (true);
|
||||
Dispose(true);
|
||||
}
|
||||
|
||||
protected virtual void Dispose (bool disposing)
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!disposing || _disposed)
|
||||
return;
|
||||
|
||||
_disposed = true;
|
||||
SetElement (null);
|
||||
SetElement(null);
|
||||
Tracker = null;
|
||||
}
|
||||
|
||||
|
@ -140,8 +146,9 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
if (_tracker == value)
|
||||
return;
|
||||
|
||||
if (_tracker != null) {
|
||||
_tracker.Dispose ();
|
||||
if (_tracker != null)
|
||||
{
|
||||
_tracker.Dispose();
|
||||
/*this.tracker.Updated -= OnTrackerUpdated;*/
|
||||
}
|
||||
|
||||
|
@ -151,8 +158,8 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
this.tracker.Updated += OnTrackerUpdated;*/
|
||||
}
|
||||
}
|
||||
|
||||
bool ITitleProvider.ShowTitle
|
||||
|
||||
bool ITitleProvider.ShowTitle
|
||||
{
|
||||
get
|
||||
{
|
||||
|
@ -164,12 +171,12 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
if (_showTitle == value)
|
||||
return;
|
||||
_showTitle = value;
|
||||
|
||||
|
||||
(Control as FormsPivot).ToolbarVisibility = _showTitle ? Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
}
|
||||
|
||||
string ITitleProvider.Title
|
||||
string ITitleProvider.Title
|
||||
{
|
||||
get
|
||||
{
|
||||
|
@ -199,86 +206,118 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
}
|
||||
}
|
||||
|
||||
protected virtual void OnElementChanged (VisualElementChangedEventArgs e)
|
||||
protected virtual void OnElementChanged(VisualElementChangedEventArgs e)
|
||||
{
|
||||
var changed = ElementChanged;
|
||||
if (changed != null)
|
||||
changed (this, e);
|
||||
changed(this, e);
|
||||
}
|
||||
|
||||
bool _disposed;
|
||||
VisualElementTracker<Page, Pivot> _tracker;
|
||||
bool _showTitle;
|
||||
|
||||
void OnPagesChanged (object sender, NotifyCollectionChangedEventArgs e)
|
||||
void OnPagesChanged(object sender, NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
e.Apply (Element.Children, Control.Items);
|
||||
e.Apply(Element.Children, Control.Items);
|
||||
|
||||
// Potential performance issue, UpdateLayout () is called for every page change
|
||||
Control.UpdateLayout ();
|
||||
Control.UpdateLayout();
|
||||
}
|
||||
|
||||
void OnSelectionChanged (object sender, SelectionChangedEventArgs e)
|
||||
void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (Element == null)
|
||||
return;
|
||||
|
||||
Page page = (e.AddedItems.Count > 0) ? (Page) e.AddedItems[0] : null;
|
||||
Page page = (e.AddedItems.Count > 0) ? (Page)e.AddedItems[0] : null;
|
||||
Element.CurrentPage = page;
|
||||
}
|
||||
|
||||
void OnElementPropertyChanged (object sender, PropertyChangedEventArgs e)
|
||||
void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == "CurrentPage")
|
||||
UpdateCurrentPage ();
|
||||
if (e.PropertyName == nameof(TabbedPage.CurrentPage))
|
||||
UpdateCurrentPage();
|
||||
else if (e.PropertyName == TabbedPage.BarTextColorProperty.PropertyName)
|
||||
UpdateBarTextColor();
|
||||
else if (e.PropertyName == TabbedPage.BarBackgroundColorProperty.PropertyName)
|
||||
UpdateBarBackgroundColor();
|
||||
}
|
||||
|
||||
void UpdateCurrentPage ()
|
||||
void UpdateCurrentPage()
|
||||
{
|
||||
Page page = Element.CurrentPage;
|
||||
UpdateTitle (page);
|
||||
UpdateTitle(page);
|
||||
|
||||
if (page == null)
|
||||
return;
|
||||
Control.SelectedItem = page;
|
||||
}
|
||||
|
||||
void OnLoaded (object sender, RoutedEventArgs args)
|
||||
void OnLoaded(object sender, RoutedEventArgs args)
|
||||
{
|
||||
if (Element == null)
|
||||
return;
|
||||
|
||||
Element.SendAppearing ();
|
||||
Element.SendAppearing();
|
||||
}
|
||||
|
||||
void OnUnloaded (object sender, RoutedEventArgs args)
|
||||
void OnUnloaded(object sender, RoutedEventArgs args)
|
||||
{
|
||||
if (Element == null)
|
||||
return;
|
||||
|
||||
Element.SendDisappearing ();
|
||||
Element.SendDisappearing();
|
||||
}
|
||||
|
||||
void OnTrackerUpdated (object sender, EventArgs e)
|
||||
void OnTrackerUpdated(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void UpdateTitle (Page child)
|
||||
Brush GetBarBackgroundBrush()
|
||||
{
|
||||
Control.ClearValue (Pivot.TitleProperty);
|
||||
object defaultColor = Windows.UI.Xaml.Application.Current.Resources["AppBarBackgroundThemeBrush"];
|
||||
if (Element.BarBackgroundColor.IsDefault && defaultColor != null)
|
||||
return (Brush)defaultColor;
|
||||
return Element.BarBackgroundColor.ToBrush();
|
||||
}
|
||||
|
||||
Brush GetBarForegroundBrush()
|
||||
{
|
||||
object defaultColor = Windows.UI.Xaml.Application.Current.Resources["AppBarItemForegroundThemeBrush"];
|
||||
if (Element.BarTextColor.IsDefault)
|
||||
return (Brush)defaultColor;
|
||||
return Element.BarTextColor.ToBrush();
|
||||
}
|
||||
|
||||
void UpdateBarBackgroundColor()
|
||||
{
|
||||
Control.ToolbarBackground = GetBarBackgroundBrush();
|
||||
}
|
||||
|
||||
void UpdateBarTextColor()
|
||||
{
|
||||
Control.ToolbarForeground = GetBarForegroundBrush();
|
||||
}
|
||||
|
||||
void UpdateTitle(Page child)
|
||||
{
|
||||
Control.ClearValue(Pivot.TitleProperty);
|
||||
|
||||
if (child == null)
|
||||
return;
|
||||
var renderer = Platform.GetRenderer (child);
|
||||
var renderer = Platform.GetRenderer(child);
|
||||
var navigationRenderer = renderer as NavigationPageRenderer;
|
||||
if (navigationRenderer != null) {
|
||||
if (navigationRenderer != null)
|
||||
{
|
||||
Control.Title = navigationRenderer.Title;
|
||||
} else {
|
||||
((ITitleProvider) this).ShowTitle = false;
|
||||
}
|
||||
else {
|
||||
((ITitleProvider)this).ShowTitle = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@ using System.Collections.Specialized;
|
|||
using System.ComponentModel;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Media;
|
||||
using Windows.UI.Xaml.Media.Animation;
|
||||
|
||||
namespace Xamarin.Forms.Platform.WinRT
|
||||
|
@ -87,6 +88,8 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
|
||||
OnPagesChanged(Page.Children, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
|
||||
UpdateCurrentPage();
|
||||
UpdateBarTextColor();
|
||||
UpdateBarBackgroundColor();
|
||||
|
||||
((INotifyCollectionChanged)Page.Children).CollectionChanged += OnPagesChanged;
|
||||
element.PropertyChanged += OnElementPropertyChanged;
|
||||
|
@ -95,6 +98,22 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));
|
||||
}
|
||||
|
||||
Brush GetBarBackgroundBrush()
|
||||
{
|
||||
object defaultColor = Windows.UI.Xaml.Application.Current.Resources["ApplicationPageBackgroundThemeBrush"];
|
||||
if (Page.BarBackgroundColor.IsDefault && defaultColor != null)
|
||||
return (Brush)defaultColor;
|
||||
return Page.BarBackgroundColor.ToBrush();
|
||||
}
|
||||
|
||||
Brush GetBarForegroundBrush()
|
||||
{
|
||||
object defaultColor = Windows.UI.Xaml.Application.Current.Resources["ApplicationForegroundThemeBrush"];
|
||||
if (Page.BarTextColor.IsDefault)
|
||||
return (Brush)defaultColor;
|
||||
return Page.BarTextColor.ToBrush();
|
||||
}
|
||||
|
||||
public SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint)
|
||||
{
|
||||
if (_canvas.Children.Count == 0)
|
||||
|
@ -153,8 +172,22 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
|
||||
void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == "CurrentPage")
|
||||
if (e.PropertyName == nameof(TabbedPage.CurrentPage))
|
||||
UpdateCurrentPage();
|
||||
else if (e.PropertyName == TabbedPage.BarTextColorProperty.PropertyName)
|
||||
UpdateBarTextColor();
|
||||
else if (e.PropertyName == TabbedPage.BarBackgroundColorProperty.PropertyName)
|
||||
UpdateBarBackgroundColor();
|
||||
}
|
||||
|
||||
void UpdateBarBackgroundColor()
|
||||
{
|
||||
_tabs.Background = GetBarBackgroundBrush();
|
||||
}
|
||||
|
||||
void UpdateBarTextColor()
|
||||
{
|
||||
_tabs.Foreground = GetBarForegroundBrush();
|
||||
}
|
||||
|
||||
void UpdateCurrentPage()
|
||||
|
|
|
@ -250,7 +250,7 @@
|
|||
<Setter Property="ItemsPanel">
|
||||
<Setter.Value>
|
||||
<ItemsPanelTemplate>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,11,0,0" />
|
||||
<StackPanel Orientation="Horizontal" Margin="0,11,0,0" Background="{TemplateBinding ToolbarBackground}" />
|
||||
</ItemsPanelTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
|
@ -261,7 +261,7 @@
|
|||
<StackPanel VerticalAlignment="Bottom">
|
||||
<Image DataContext="{Binding Icon, Converter={StaticResource ImageConverter}}" Source="{Binding Value}" HorizontalAlignment="Left" />
|
||||
<TextBlock Margin="0,15,0,15" Text="{Binding Title, Converter={StaticResource UpperConverter}}"
|
||||
Style="{ThemeResource CaptionTextBlockStyle}" FontWeight="SemiBold" Foreground="{ThemeResource AppBarItemForegroundThemeBrush}" HorizontalAlignment="Left" />
|
||||
Style="{ThemeResource CaptionTextBlockStyle}" FontWeight="SemiBold" Foreground="{TemplateBinding ToolbarForeground}" HorizontalAlignment="Left" />
|
||||
</StackPanel>
|
||||
</local:TabButton>
|
||||
</DataTemplate>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Media;
|
||||
|
||||
namespace Xamarin.Forms.Platform.WinRT
|
||||
{
|
||||
|
@ -46,5 +47,20 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
public class TabsControl
|
||||
: ItemsControl
|
||||
{
|
||||
|
||||
public static readonly DependencyProperty ToolbarForegroundProperty = DependencyProperty.Register(nameof(ToolbarForeground), typeof(Brush), typeof(TabsControl), new PropertyMetadata(default(Brush)));
|
||||
public static readonly DependencyProperty ToolbarBackgroundProperty = DependencyProperty.Register(nameof(ToolbarBackground), typeof(Brush), typeof(TabsControl), new PropertyMetadata(default(Brush)));
|
||||
|
||||
public Brush ToolbarBackground
|
||||
{
|
||||
get { return (Brush)GetValue(ToolbarBackgroundProperty); }
|
||||
set { SetValue(ToolbarBackgroundProperty, value); }
|
||||
}
|
||||
|
||||
public Brush ToolbarForeground
|
||||
{
|
||||
get { return (Brush)GetValue(ToolbarForegroundProperty); }
|
||||
set { SetValue(ToolbarForegroundProperty, value); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -594,6 +594,8 @@ namespace Xamarin.Forms.Platform.iOS
|
|||
{
|
||||
var titleAttributes = new UIStringAttributes();
|
||||
titleAttributes.Font = globalAttributes.Font;
|
||||
// TODO: the ternary if statement here will always return false because of the encapsulating if statement.
|
||||
// What was the intention?
|
||||
titleAttributes.ForegroundColor = barTextColor == Color.Default
|
||||
? titleAttributes.ForegroundColor ?? UINavigationBar.Appearance.TintColor
|
||||
: barTextColor.ToUIColor();
|
||||
|
@ -640,7 +642,7 @@ namespace Xamarin.Forms.Platform.iOS
|
|||
{
|
||||
containerController.NavigationItem.LeftBarButtonItem =
|
||||
new UIBarButtonItem(new UIImage(_parentMasterDetailPage.Master.Icon), UIBarButtonItemStyle.Plain,
|
||||
(o, e) => _parentMasterDetailPage.IsPresented = !_parentMasterDetailPage.IsPresented);
|
||||
(o, e) => _parentMasterDetailPage.IsPresented = !_parentMasterDetailPage.IsPresented);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
|
|
@ -74,6 +74,9 @@ namespace Xamarin.Forms.Platform.iOS
|
|||
//disable edit/reorder of tabs
|
||||
CustomizableViewControllers = null;
|
||||
|
||||
UpdateBarBackgroundColor();
|
||||
UpdateBarTextColor();
|
||||
|
||||
EffectUtilities.RegisterEffectControlProvider(this, oldElement, element);
|
||||
}
|
||||
|
||||
|
@ -227,7 +230,7 @@ namespace Xamarin.Forms.Platform.iOS
|
|||
|
||||
void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == "CurrentPage")
|
||||
if (e.PropertyName == nameof(TabbedPage.CurrentPage))
|
||||
{
|
||||
var current = Tabbed.CurrentPage;
|
||||
if (current == null)
|
||||
|
@ -239,6 +242,10 @@ namespace Xamarin.Forms.Platform.iOS
|
|||
|
||||
SelectedViewController = controller;
|
||||
}
|
||||
else if (e.PropertyName == TabbedPage.BarBackgroundColorProperty.PropertyName)
|
||||
UpdateBarBackgroundColor();
|
||||
else if (e.PropertyName == TabbedPage.BarTextColorProperty.PropertyName)
|
||||
UpdateBarTextColor();
|
||||
}
|
||||
|
||||
void Reset()
|
||||
|
@ -292,6 +299,52 @@ namespace Xamarin.Forms.Platform.iOS
|
|||
Platform.SetRenderer(page, null);
|
||||
}
|
||||
|
||||
void UpdateBarBackgroundColor()
|
||||
{
|
||||
if (Tabbed == null || TabBar == null)
|
||||
return;
|
||||
|
||||
var barBackgroundColor = Tabbed.BarBackgroundColor;
|
||||
|
||||
if (Forms.IsiOS7OrNewer)
|
||||
{
|
||||
TabBar.BarTintColor = barBackgroundColor == Color.Default ? UINavigationBar.Appearance.BarTintColor : barBackgroundColor.ToUIColor();
|
||||
}
|
||||
else
|
||||
{
|
||||
TabBar.TintColor = barBackgroundColor == Color.Default ? UINavigationBar.Appearance.TintColor : barBackgroundColor.ToUIColor();
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateBarTextColor()
|
||||
{
|
||||
if (Tabbed == null || TabBar == null || TabBar.Items == null)
|
||||
return;
|
||||
|
||||
var barTextColor = Tabbed.BarTextColor;
|
||||
|
||||
var globalAttributes = UINavigationBar.Appearance.GetTitleTextAttributes();
|
||||
|
||||
var attributes = new UITextAttributes { Font = globalAttributes.Font };
|
||||
|
||||
if (barTextColor == Color.Default)
|
||||
attributes.TextColor = globalAttributes.TextColor;
|
||||
else
|
||||
attributes.TextColor = barTextColor.ToUIColor();
|
||||
|
||||
foreach (UITabBarItem item in TabBar.Items)
|
||||
{
|
||||
item.SetTitleTextAttributes(attributes, UIControlState.Normal);
|
||||
}
|
||||
|
||||
// set TintColor for selected icon
|
||||
// setting the unselected icon tint is not supported by iOS
|
||||
if (Forms.IsiOS7OrNewer)
|
||||
{
|
||||
TabBar.TintColor = barTextColor == Color.Default ? UINavigationBar.Appearance.TintColor : barTextColor.ToUIColor();
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateChildrenOrderIndex(UIViewController[] viewControllers)
|
||||
{
|
||||
for (var i = 0; i < viewControllers.Length; i++)
|
||||
|
|
|
@ -159,6 +159,68 @@ class TabbedPageDemoPage2 : TabbedPage
|
|||
<remarks>To be added.</remarks>
|
||||
</Docs>
|
||||
</Member>
|
||||
<Member MemberName="BarBackgroundColor">
|
||||
<MemberSignature Language="C#" Value="public Xamarin.Forms.Color BarBackgroundColor { get; set; }" />
|
||||
<MemberSignature Language="ILAsm" Value=".property instance valuetype Xamarin.Forms.Color BarBackgroundColor" />
|
||||
<MemberType>Property</MemberType>
|
||||
<AssemblyInfo>
|
||||
<AssemblyVersion>2.0.0.0</AssemblyVersion>
|
||||
</AssemblyInfo>
|
||||
<ReturnValue>
|
||||
<ReturnType>Xamarin.Forms.Color</ReturnType>
|
||||
</ReturnValue>
|
||||
<Docs>
|
||||
<summary>To be added.</summary>
|
||||
<value>To be added.</value>
|
||||
<remarks>To be added.</remarks>
|
||||
</Docs>
|
||||
</Member>
|
||||
<Member MemberName="BarBackgroundColorProperty">
|
||||
<MemberSignature Language="C#" Value="public static readonly Xamarin.Forms.BindableProperty BarBackgroundColorProperty;" />
|
||||
<MemberSignature Language="ILAsm" Value=".field public static initonly class Xamarin.Forms.BindableProperty BarBackgroundColorProperty" />
|
||||
<MemberType>Field</MemberType>
|
||||
<AssemblyInfo>
|
||||
<AssemblyVersion>2.0.0.0</AssemblyVersion>
|
||||
</AssemblyInfo>
|
||||
<ReturnValue>
|
||||
<ReturnType>Xamarin.Forms.BindableProperty</ReturnType>
|
||||
</ReturnValue>
|
||||
<Docs>
|
||||
<summary>To be added.</summary>
|
||||
<remarks>To be added.</remarks>
|
||||
</Docs>
|
||||
</Member>
|
||||
<Member MemberName="BarTextColor">
|
||||
<MemberSignature Language="C#" Value="public Xamarin.Forms.Color BarTextColor { get; set; }" />
|
||||
<MemberSignature Language="ILAsm" Value=".property instance valuetype Xamarin.Forms.Color BarTextColor" />
|
||||
<MemberType>Property</MemberType>
|
||||
<AssemblyInfo>
|
||||
<AssemblyVersion>2.0.0.0</AssemblyVersion>
|
||||
</AssemblyInfo>
|
||||
<ReturnValue>
|
||||
<ReturnType>Xamarin.Forms.Color</ReturnType>
|
||||
</ReturnValue>
|
||||
<Docs>
|
||||
<summary>To be added.</summary>
|
||||
<value>To be added.</value>
|
||||
<remarks>To be added.</remarks>
|
||||
</Docs>
|
||||
</Member>
|
||||
<Member MemberName="BarTextColorProperty">
|
||||
<MemberSignature Language="C#" Value="public static readonly Xamarin.Forms.BindableProperty BarTextColorProperty;" />
|
||||
<MemberSignature Language="ILAsm" Value=".field public static initonly class Xamarin.Forms.BindableProperty BarTextColorProperty" />
|
||||
<MemberType>Field</MemberType>
|
||||
<AssemblyInfo>
|
||||
<AssemblyVersion>2.0.0.0</AssemblyVersion>
|
||||
</AssemblyInfo>
|
||||
<ReturnValue>
|
||||
<ReturnType>Xamarin.Forms.BindableProperty</ReturnType>
|
||||
</ReturnValue>
|
||||
<Docs>
|
||||
<summary>To be added.</summary>
|
||||
<remarks>To be added.</remarks>
|
||||
</Docs>
|
||||
</Member>
|
||||
<Member MemberName="CreateDefault">
|
||||
<MemberSignature Language="C#" Value="protected override Xamarin.Forms.Page CreateDefault (object item);" />
|
||||
<MemberSignature Language="ILAsm" Value=".method familyhidebysig virtual instance class Xamarin.Forms.Page CreateDefault(object item) cil managed" />
|
||||
|
@ -196,7 +258,6 @@ class TabbedPageDemoPage2 : TabbedPage
|
|||
<AssemblyVersion>1.3.0.0</AssemblyVersion>
|
||||
<AssemblyVersion>1.4.0.0</AssemblyVersion>
|
||||
<AssemblyVersion>1.5.0.0</AssemblyVersion>
|
||||
<AssemblyVersion>2.0.0.0</AssemblyVersion>
|
||||
</AssemblyInfo>
|
||||
<ReturnValue>
|
||||
<ReturnType>System.Void</ReturnType>
|
||||
|
|
Загрузка…
Ссылка в новой задаче