summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Xamarin.Forms.Controls/CoreGallery.cs3
-rw-r--r--Xamarin.Forms.Platform.UAP/Resources.xaml6
-rw-r--r--Xamarin.Forms.Platform.UAP/TabbedPageRenderer.cs73
-rw-r--r--Xamarin.Forms.Platform.WinRT.Phone/FormsPivot.cs6
-rw-r--r--Xamarin.Forms.Platform.WinRT.Phone/PhoneResources.xaml6
-rw-r--r--Xamarin.Forms.Platform.WinRT.Phone/TabbedPageRenderer.cs103
-rw-r--r--Xamarin.Forms.Platform.WinRT.Tablet/TabbedPageRenderer.cs70
-rw-r--r--Xamarin.Forms.Platform.WinRT.Tablet/TabletResources.xaml4
-rw-r--r--Xamarin.Forms.Platform.WinRT/FrameworkElementExtensions.cs18
9 files changed, 220 insertions, 69 deletions
diff --git a/Xamarin.Forms.Controls/CoreGallery.cs b/Xamarin.Forms.Controls/CoreGallery.cs
index 8fd1f7bc..dc3217ca 100644
--- a/Xamarin.Forms.Controls/CoreGallery.cs
+++ b/Xamarin.Forms.Controls/CoreGallery.cs
@@ -117,7 +117,8 @@ namespace Xamarin.Forms.Controls
{
Title = "Rubriques",
Icon = "coffee.png",
- BarBackgroundColor = Color.Blue
+ BarBackgroundColor = Color.Blue,
+ BarTextColor = Color.Aqua
});
Children.Add(new NavigationPage(new Page())
diff --git a/Xamarin.Forms.Platform.UAP/Resources.xaml b/Xamarin.Forms.Platform.UAP/Resources.xaml
index 7a11fe4f..5df785f0 100644
--- a/Xamarin.Forms.Platform.UAP/Resources.xaml
+++ b/Xamarin.Forms.Platform.UAP/Resources.xaml
@@ -463,7 +463,7 @@
<uwp:EntryCellTextBox IsEnabled="{Binding IsEnabled}" Header="{Binding}" Text="{Binding Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TextAlignment="{Binding HorizontalTextAlignment,Converter={StaticResource HorizontalTextAlignmentConverter}}" PlaceholderText="{Binding Placeholder}" InputScope="{Binding Keyboard,Converter={StaticResource KeyboardConverter}}" HorizontalAlignment="Stretch">
<uwp:EntryCellTextBox.HeaderTemplate>
<DataTemplate>
- <TextBlock Text="{Binding Label}" Style="{ThemeResource BaseTextBlockStyle}" Foreground="{Binding LabelColor, Converter={StaticResource ColorConverter}, ConverterParameter=DefaultTextForegroundThemeBrush}" />
+ <TextBlock Text="{Binding Label}" Style="{ThemeResource BaseTextBlockStyle}" Foreground="{Binding LabelColor, Converter={StaticResource ColorConverter}, ConverterParameter=SystemControlBackgroundChromeMediumLowBrush}" />
</DataTemplate>
</uwp:EntryCellTextBox.HeaderTemplate>
</uwp:EntryCellTextBox>
@@ -473,7 +473,7 @@
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
- <TextBlock Text="{Binding Title}" Foreground="{Binding ToolbarForeground}" Style="{ThemeResource BodyTextBlockStyle}" />
+ <TextBlock Name="TabbedPageHeaderTextBlock" Text="{Binding Title}" Style="{ThemeResource BodyTextBlockStyle}" />
</DataTemplate>
</Setter.Value>
</Setter>
@@ -618,7 +618,7 @@
<ContentControl.Clip>
<RectangleGeometry x:Name="HeaderClipperGeometry"/>
</ContentControl.Clip>
- <Grid Background="{TemplateBinding ToolbarBackground}">
+ <Grid Name="TabbedPageHeaderGrid" Background="{TemplateBinding ToolbarBackground}">
<PivotHeaderPanel x:Name="StaticHeader" Visibility="Collapsed"/>
<PivotHeaderPanel x:Name="Header">
<PivotHeaderPanel.RenderTransform>
diff --git a/Xamarin.Forms.Platform.UAP/TabbedPageRenderer.cs b/Xamarin.Forms.Platform.UAP/TabbedPageRenderer.cs
index 0e6ce0b4..aa988b80 100644
--- a/Xamarin.Forms.Platform.UAP/TabbedPageRenderer.cs
+++ b/Xamarin.Forms.Platform.UAP/TabbedPageRenderer.cs
@@ -7,6 +7,7 @@ using Windows.UI.Xaml.Automation;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using Xamarin.Forms.Internals;
+using WGrid = Windows.UI.Xaml.Controls.Grid;
namespace Xamarin.Forms.Platform.UWP
{
@@ -16,7 +17,7 @@ namespace Xamarin.Forms.Platform.UWP
{
Loaded += TabbedPagePresenter_Loaded;
Unloaded += TabbedPagePresenter_Unloaded;
- SizeChanged += (s, e) =>
+ SizeChanged += (s, e) =>
{
if (ActualWidth > 0 && ActualHeight > 0)
{
@@ -41,10 +42,17 @@ namespace Xamarin.Forms.Platform.UWP
public class TabbedPageRenderer : IVisualElementRenderer, ITitleProvider, IToolbarProvider
{
+ const string TabBarHeaderTextBlockName = "TabbedPageHeaderTextBlock";
+ const string TabBarHeaderGridName = "TabbedPageHeaderGrid";
+
+ Color _barBackgroundColor;
+ Color _barTextColor;
bool _disposed;
bool _showTitle;
VisualElementTracker<Page, Pivot> _tracker;
+ ITitleProvider TitleProvider => this;
+
public FormsPivot Control { get; private set; }
public TabbedPage Element { get; private set; }
@@ -71,12 +79,12 @@ namespace Xamarin.Forms.Platform.UWP
Brush ITitleProvider.BarBackgroundBrush
{
- set { (Control as FormsPivot).ToolbarBackground = value; }
+ set { Control.ToolbarBackground = value; }
}
Brush ITitleProvider.BarForegroundBrush
{
- set { (Control as FormsPivot).ToolbarForeground = value; }
+ set { Control.ToolbarForeground = value; }
}
IPageController PageController => Element as IPageController;
@@ -172,9 +180,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;
@@ -183,7 +190,6 @@ namespace Xamarin.Forms.Platform.UWP
Control.SetValue(AutomationProperties.AutomationIdProperty, element.AutomationId);
}
-
OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));
}
@@ -208,17 +214,22 @@ namespace Xamarin.Forms.Platform.UWP
void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(TabbedPage.CurrentPage))
+ {
UpdateCurrentPage();
+ UpdateBarTextColor();
+ UpdateBarBackgroundColor();
+ }
else if (e.PropertyName == TabbedPage.BarTextColorProperty.PropertyName)
UpdateBarTextColor();
else if (e.PropertyName == TabbedPage.BarBackgroundColorProperty.PropertyName)
UpdateBarBackgroundColor();
-
}
void OnLoaded(object sender, RoutedEventArgs args)
{
PageController?.SendAppearing();
+ UpdateBarTextColor();
+ UpdateBarBackgroundColor();
}
void OnPagesChanged(object sender, NotifyCollectionChangedEventArgs e)
@@ -259,24 +270,59 @@ namespace Xamarin.Forms.Platform.UWP
Brush GetBarForegroundBrush()
{
object defaultColor = Windows.UI.Xaml.Application.Current.Resources["ApplicationForegroundThemeBrush"];
- if (Element.BarTextColor.IsDefault)
+ if (Element.BarTextColor.IsDefault && defaultColor != null)
return (Brush)defaultColor;
return Element.BarTextColor.ToBrush();
}
void UpdateBarBackgroundColor()
{
- Control.ToolbarBackground = GetBarBackgroundBrush();
+ if (Element == null) return;
+ var barBackgroundColor = Element.BarBackgroundColor;
+
+ if (barBackgroundColor == _barBackgroundColor) return;
+ _barBackgroundColor = barBackgroundColor;
+
+ var controlToolbarBackground = Control.ToolbarBackground;
+ if (controlToolbarBackground == null && barBackgroundColor.IsDefault) return;
+
+ var brush = GetBarBackgroundBrush();
+ if (brush == controlToolbarBackground) return;
+
+ TitleProvider.BarBackgroundBrush = brush;
+
+ foreach (WGrid tabBarGrid in Control.GetDescendantsByName<WGrid>(TabBarHeaderGridName))
+ {
+ tabBarGrid.Background = brush;
+ }
}
void UpdateBarTextColor()
{
- Control.ToolbarForeground = GetBarForegroundBrush();
+ if (Element == null) return;
+ var barTextColor = Element.BarTextColor;
+
+ if (barTextColor == _barTextColor) return;
+ _barTextColor = barTextColor;
+
+ var controlToolbarForeground = Control.ToolbarForeground;
+ if (controlToolbarForeground == null && barTextColor.IsDefault) return;
+
+ var brush = GetBarForegroundBrush();
+ if (brush == controlToolbarForeground)
+ return;
+
+ TitleProvider.BarForegroundBrush = brush;
+
+ foreach (TextBlock tabBarTextBlock in Control.GetDescendantsByName<TextBlock>(TabBarHeaderTextBlockName))
+ {
+ tabBarTextBlock.Foreground = brush;
+ }
}
void UpdateBarVisibility()
{
- (Control as FormsPivot).ToolbarVisibility = _showTitle ? Visibility.Visible : Visibility.Collapsed;
+ Control.ToolbarVisibility = _showTitle ? Visibility.Visible : Visibility.Collapsed;
}
void UpdateCurrentPage()
@@ -284,10 +330,7 @@ namespace Xamarin.Forms.Platform.UWP
Page page = Element.CurrentPage;
var nav = page as NavigationPage;
- ((ITitleProvider)this).ShowTitle = nav != null;
-
- UpdateBarTextColor();
- UpdateBarBackgroundColor();
+ TitleProvider.ShowTitle = nav != null;
if (page == null)
return;
diff --git a/Xamarin.Forms.Platform.WinRT.Phone/FormsPivot.cs b/Xamarin.Forms.Platform.WinRT.Phone/FormsPivot.cs
index d829b787..a2e765b3 100644
--- a/Xamarin.Forms.Platform.WinRT.Phone/FormsPivot.cs
+++ b/Xamarin.Forms.Platform.WinRT.Phone/FormsPivot.cs
@@ -12,12 +12,12 @@ namespace Xamarin.Forms.Platform.WinRT
{
public class FormsPivot : Pivot, IToolbarProvider
{
- public static readonly DependencyProperty ToolbarVisibilityProperty = DependencyProperty.Register("ToolbarVisibility", typeof(Visibility), typeof(FormsPivot),
+ public static readonly DependencyProperty ToolbarVisibilityProperty = DependencyProperty.Register(nameof(ToolbarVisibility), typeof(Visibility), typeof(FormsPivot),
new PropertyMetadata(Visibility.Collapsed));
- public static readonly DependencyProperty ToolbarForegroundProperty = DependencyProperty.Register("ToolbarForeground", typeof(Brush), typeof(FormsPivot), new PropertyMetadata(default(Brush)));
+ public static readonly DependencyProperty ToolbarForegroundProperty = DependencyProperty.Register(nameof(ToolbarForeground), typeof(Brush), typeof(FormsPivot), new PropertyMetadata(default(Brush)));
- public static readonly DependencyProperty ToolbarBackgroundProperty = DependencyProperty.Register("ToolbarBackground", typeof(Brush), typeof(FormsPivot), new PropertyMetadata(default(Brush)));
+ public static readonly DependencyProperty ToolbarBackgroundProperty = DependencyProperty.Register(nameof(ToolbarBackground), typeof(Brush), typeof(FormsPivot), new PropertyMetadata(default(Brush)));
CommandBar _commandBar;
diff --git a/Xamarin.Forms.Platform.WinRT.Phone/PhoneResources.xaml b/Xamarin.Forms.Platform.WinRT.Phone/PhoneResources.xaml
index 4dcf4be5..b693a226 100644
--- a/Xamarin.Forms.Platform.WinRT.Phone/PhoneResources.xaml
+++ b/Xamarin.Forms.Platform.WinRT.Phone/PhoneResources.xaml
@@ -242,7 +242,7 @@
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
- <TextBlock Text="{Binding Title}" Foreground="{TemplateBinding ToolbarForeground}" />
+ <TextBlock Text="{Binding Title}" Name="TabbedPageHeaderTextBlock" />
</DataTemplate>
</Setter.Value>
</Setter>
@@ -452,10 +452,6 @@
<local:TabbedPagePresenter Content="{Binding Converter={StaticResource PageToRenderer}}" />
</DataTemplate>
- <DataTemplate x:Key="TabbedPageHeader">
- <TextBlock Text="{Binding Title}" />
- </DataTemplate>
-
<Style x:Key="JumpListGrid" TargetType="GridView">
<Setter Property="Background" Value="#80000000" />
<Setter Property="ItemTemplate">
diff --git a/Xamarin.Forms.Platform.WinRT.Phone/TabbedPageRenderer.cs b/Xamarin.Forms.Platform.WinRT.Phone/TabbedPageRenderer.cs
index 68cafae3..df4fba71 100644
--- a/Xamarin.Forms.Platform.WinRT.Phone/TabbedPageRenderer.cs
+++ b/Xamarin.Forms.Platform.WinRT.Phone/TabbedPageRenderer.cs
@@ -6,6 +6,7 @@ using Windows.UI.Xaml.Automation;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using Xamarin.Forms.Internals;
+using WGrid = Windows.UI.Xaml.Controls.Grid;
namespace Xamarin.Forms.Platform.WinRT
{
@@ -13,7 +14,8 @@ namespace Xamarin.Forms.Platform.WinRT
{
public TabbedPagePresenter()
{
- SizeChanged += (s, e) => {
+ SizeChanged += (s, e) =>
+ {
if (ActualWidth > 0 && ActualHeight > 0)
{
var tab = ((Page)DataContext);
@@ -26,6 +28,18 @@ namespace Xamarin.Forms.Platform.WinRT
public class TabbedPageRenderer
: IVisualElementRenderer, ITitleProvider
{
+ const string TabBarHeaderTextBlockName = "TabbedPageHeaderTextBlock";
+ const string TabBarHeaderGridName = "TabbedPageHeaderGrid";
+
+ Color _barBackgroundColor;
+ Color _barTextColor;
+ bool _disposed;
+ VisualElementTracker<Page, Pivot> _tracker;
+ bool _showTitle;
+
+ ITitleProvider TitleProvider => this;
+ IPageController PageController => Element as IPageController;
+
public event EventHandler<VisualElementChangedEventArgs> ElementChanged;
public FrameworkElement ContainerElement
@@ -68,15 +82,16 @@ namespace Xamarin.Forms.Platform.WinRT
{
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"],
+ ItemTemplate = (Windows.UI.Xaml.DataTemplate)Windows.UI.Xaml.Application.Current.Resources["TabbedPage"]
};
- 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) {
+ Tracker = new BackgroundTracker<Pivot>(Windows.UI.Xaml.Controls.Control.BackgroundProperty)
+ {
Element = (Page)element,
Control = Control,
Container = Control
@@ -88,9 +103,8 @@ namespace Xamarin.Forms.Platform.WinRT
Control.DataContext = Element;
OnPagesChanged(Element.Children, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
+
UpdateCurrentPage();
- UpdateBarTextColor();
- UpdateBarBackgroundColor();
((INotifyCollectionChanged)Element.Children).CollectionChanged += OnPagesChanged;
element.PropertyChanged += OnElementPropertyChanged;
@@ -173,7 +187,7 @@ namespace Xamarin.Forms.Platform.WinRT
return;
_showTitle = value;
- (Control as FormsPivot).ToolbarVisibility = _showTitle ? Visibility.Visible : Visibility.Collapsed;
+ Control.ToolbarVisibility = _showTitle ? Visibility.Visible : Visibility.Collapsed;
}
}
@@ -195,7 +209,7 @@ namespace Xamarin.Forms.Platform.WinRT
{
set
{
- (Control as FormsPivot).ToolbarBackground = value;
+ Control.ToolbarBackground = value;
}
}
@@ -203,7 +217,7 @@ namespace Xamarin.Forms.Platform.WinRT
{
set
{
- (Control as FormsPivot).ToolbarForeground = value;
+ Control.ToolbarForeground = value;
}
}
@@ -214,10 +228,6 @@ namespace Xamarin.Forms.Platform.WinRT
changed(this, e);
}
- bool _disposed;
- VisualElementTracker<Page, Pivot> _tracker;
- bool _showTitle;
-
void OnPagesChanged(object sender, NotifyCollectionChangedEventArgs e)
{
e.Apply(Element.Children, Control.Items);
@@ -238,7 +248,11 @@ namespace Xamarin.Forms.Platform.WinRT
void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(TabbedPage.CurrentPage))
+ {
UpdateCurrentPage();
+ UpdateBarTextColor();
+ UpdateBarBackgroundColor();
+ }
else if (e.PropertyName == TabbedPage.BarTextColorProperty.PropertyName)
UpdateBarTextColor();
else if (e.PropertyName == TabbedPage.BarBackgroundColorProperty.PropertyName)
@@ -257,18 +271,14 @@ namespace Xamarin.Forms.Platform.WinRT
void OnLoaded(object sender, RoutedEventArgs args)
{
- if (Element == null)
- return;
-
- ((IPageController)Element).SendAppearing();
+ PageController?.SendAppearing();
+ UpdateBarTextColor();
+ UpdateBarBackgroundColor();
}
void OnUnloaded(object sender, RoutedEventArgs args)
{
- if (Element == null)
- return;
-
- ((IPageController)Element).SendDisappearing();
+ PageController?.SendDisappearing();
}
void OnTrackerUpdated(object sender, EventArgs e)
@@ -287,19 +297,53 @@ namespace Xamarin.Forms.Platform.WinRT
Brush GetBarForegroundBrush()
{
object defaultColor = Windows.UI.Xaml.Application.Current.Resources["AppBarItemForegroundThemeBrush"];
- if (Element.BarTextColor.IsDefault)
+ if (Element.BarTextColor.IsDefault && defaultColor != null)
return (Brush)defaultColor;
return Element.BarTextColor.ToBrush();
}
void UpdateBarBackgroundColor()
{
- Control.ToolbarBackground = GetBarBackgroundBrush();
+ if (Element == null) return;
+ var barBackgroundColor = Element.BarBackgroundColor;
+
+ if (barBackgroundColor == _barBackgroundColor) return;
+ _barBackgroundColor = barBackgroundColor;
+
+ var controlToolbarBackground = Control.ToolbarBackground;
+ if (controlToolbarBackground == null && barBackgroundColor.IsDefault) return;
+
+ var brush = GetBarBackgroundBrush();
+ if (brush == controlToolbarBackground) return;
+
+ TitleProvider.BarBackgroundBrush = brush;
+
+ foreach (WGrid tabBarGrid in Control.GetDescendantsByName<WGrid>(TabBarHeaderGridName))
+ {
+ tabBarGrid.Background = brush;
+ }
}
void UpdateBarTextColor()
{
- Control.ToolbarForeground = GetBarForegroundBrush();
+ if (Element == null) return;
+ var barTextColor = Element.BarTextColor;
+
+ if (barTextColor == _barTextColor) return;
+ _barTextColor = barTextColor;
+
+ var controlToolbarForeground = Control.ToolbarForeground;
+ if (controlToolbarForeground == null && barTextColor.IsDefault) return;
+
+ var brush = GetBarForegroundBrush();
+ if (brush == controlToolbarForeground) return;
+
+ TitleProvider.BarForegroundBrush = brush;
+
+ foreach (TextBlock tabBarTextBlock in Control.GetDescendantsByName<TextBlock>(TabBarHeaderTextBlockName))
+ {
+ tabBarTextBlock.Foreground = brush;
+ }
}
void UpdateTitle(Page child)
@@ -314,11 +358,10 @@ namespace Xamarin.Forms.Platform.WinRT
{
Control.Title = navigationRenderer.Title;
}
- else {
- ((ITitleProvider)this).ShowTitle = false;
+ else
+ {
+ TitleProvider.ShowTitle = false;
}
-
}
-
}
} \ No newline at end of file
diff --git a/Xamarin.Forms.Platform.WinRT.Tablet/TabbedPageRenderer.cs b/Xamarin.Forms.Platform.WinRT.Tablet/TabbedPageRenderer.cs
index bcdbe56d..7d3b1a8c 100644
--- a/Xamarin.Forms.Platform.WinRT.Tablet/TabbedPageRenderer.cs
+++ b/Xamarin.Forms.Platform.WinRT.Tablet/TabbedPageRenderer.cs
@@ -12,8 +12,12 @@ namespace Xamarin.Forms.Platform.WinRT
public class TabbedPageRenderer
: IVisualElementRenderer
{
- Canvas _canvas;
+ const string TabBarHeaderTextBlockName = "TabbedPageHeaderTextBlock";
+ const string TabbedPageHeaderStackPanelName = "TabbedPageHeaderStackPanel";
+ Color _barBackgroundColor;
+ Color _barTextColor;
+ Canvas _canvas;
bool _disposed;
TabsControl _tabs;
VisualElementTracker<Page, Canvas> _tracker;
@@ -83,16 +87,16 @@ namespace Xamarin.Forms.Platform.WinRT
Container = _canvas
};
- _canvas.Loaded += OnLoaded;
- _canvas.Unloaded += OnUnloaded;
+ _canvas.Loaded += canvas_OnLoaded;
+ _canvas.Unloaded += canvas_OnUnloaded;
+
+ _tabs.Loaded += tabs_OnLoaded;
}
_tabs.DataContext = element;
OnPagesChanged(Page.Children, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
UpdateCurrentPage();
- UpdateBarTextColor();
- UpdateBarBackgroundColor();
((INotifyCollectionChanged)Page.Children).CollectionChanged += OnPagesChanged;
element.PropertyChanged += OnElementPropertyChanged;
@@ -112,7 +116,7 @@ namespace Xamarin.Forms.Platform.WinRT
Brush GetBarForegroundBrush()
{
object defaultColor = Windows.UI.Xaml.Application.Current.Resources["ApplicationForegroundThemeBrush"];
- if (Page.BarTextColor.IsDefault)
+ if (Page.BarTextColor.IsDefault && defaultColor != null)
return (Brush)defaultColor;
return Page.BarTextColor.ToBrush();
}
@@ -176,7 +180,11 @@ namespace Xamarin.Forms.Platform.WinRT
void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(TabbedPage.CurrentPage))
+ {
UpdateCurrentPage();
+ UpdateBarTextColor();
+ UpdateBarBackgroundColor();
+ }
else if (e.PropertyName == TabbedPage.BarTextColorProperty.PropertyName)
UpdateBarTextColor();
else if (e.PropertyName == TabbedPage.BarBackgroundColorProperty.PropertyName)
@@ -185,12 +193,48 @@ namespace Xamarin.Forms.Platform.WinRT
void UpdateBarBackgroundColor()
{
- _tabs.Background = GetBarBackgroundBrush();
+ TabbedPage tabbedPage = Element as TabbedPage;
+ if (tabbedPage == null) return;
+ var barBackgroundColor = tabbedPage.BarBackgroundColor;
+
+ if (barBackgroundColor == _barBackgroundColor) return;
+ _barBackgroundColor = barBackgroundColor;
+
+ var controlToolbarBackground = _tabs.ToolbarBackground;
+ if (controlToolbarBackground == null && barBackgroundColor.IsDefault) return;
+
+ var brush = GetBarBackgroundBrush();
+ if (brush == controlToolbarBackground) return;
+
+ _tabs.ToolbarBackground = brush;
+
+ foreach (StackPanel tabBarGrid in _tabs.GetDescendantsByName<StackPanel>(TabbedPageHeaderStackPanelName))
+ {
+ tabBarGrid.Background = brush;
+ }
}
void UpdateBarTextColor()
{
- _tabs.Foreground = GetBarForegroundBrush();
+ TabbedPage tabbedPage = Element as TabbedPage;
+ if (tabbedPage == null) return;
+ var barTextColor = tabbedPage.BarTextColor;
+
+ if (barTextColor == _barTextColor) return;
+ _barTextColor = barTextColor;
+
+ var controlToolbarForeground = _tabs.ToolbarForeground;
+ if (controlToolbarForeground == null && barTextColor.IsDefault) return;
+
+ var brush = GetBarForegroundBrush();
+ if (brush == controlToolbarForeground) return;
+
+ _tabs.ToolbarForeground = brush;
+
+ foreach (TextBlock tabBarTextBlock in _tabs.GetDescendantsByName<TextBlock>(TabBarHeaderTextBlockName))
+ {
+ tabBarTextBlock.Foreground = brush;
+ }
}
void UpdateCurrentPage()
@@ -202,7 +246,7 @@ namespace Xamarin.Forms.Platform.WinRT
_canvas.Children.Add(renderer.ContainerElement);
}
- void OnLoaded(object sender, RoutedEventArgs args)
+ void canvas_OnLoaded(object sender, RoutedEventArgs args)
{
if (Page == null)
return;
@@ -211,6 +255,12 @@ namespace Xamarin.Forms.Platform.WinRT
PageController.SendAppearing();
}
+ void tabs_OnLoaded(object sender, RoutedEventArgs e)
+ {
+ UpdateBarTextColor();
+ UpdateBarBackgroundColor();
+ }
+
Windows.UI.Xaml.Controls.Page GetTopPage()
{
var frame = Window.Current.Content as Windows.UI.Xaml.Controls.Frame;
@@ -262,7 +312,7 @@ namespace Xamarin.Forms.Platform.WinRT
page.TopAppBar = null;
}
- void OnUnloaded(object sender, RoutedEventArgs args)
+ void canvas_OnUnloaded(object sender, RoutedEventArgs args)
{
RemoveTabs();
PageController?.SendDisappearing();
diff --git a/Xamarin.Forms.Platform.WinRT.Tablet/TabletResources.xaml b/Xamarin.Forms.Platform.WinRT.Tablet/TabletResources.xaml
index cfd51257..9dad373a 100644
--- a/Xamarin.Forms.Platform.WinRT.Tablet/TabletResources.xaml
+++ b/Xamarin.Forms.Platform.WinRT.Tablet/TabletResources.xaml
@@ -250,7 +250,7 @@
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
- <StackPanel Orientation="Horizontal" Margin="0,11,0,0" Background="{TemplateBinding ToolbarBackground}" />
+ <StackPanel Orientation="Horizontal" Margin="0,11,0,0" Background="{Binding BarBackgroundColor, Converter={StaticResource ColorConverter}, ConverterParameter=TabButtonBackgroundBrush}" Name="TabbedPageHeaderStackPanel" />
</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="{TemplateBinding ToolbarForeground}" HorizontalAlignment="Left" />
+ Style="{ThemeResource CaptionTextBlockStyle}" FontWeight="SemiBold" Name="TabbedPageHeaderTextBlock" HorizontalAlignment="Left" />
</StackPanel>
</local:TabButton>
</DataTemplate>
diff --git a/Xamarin.Forms.Platform.WinRT/FrameworkElementExtensions.cs b/Xamarin.Forms.Platform.WinRT/FrameworkElementExtensions.cs
index 64b2daab..eb040e02 100644
--- a/Xamarin.Forms.Platform.WinRT/FrameworkElementExtensions.cs
+++ b/Xamarin.Forms.Platform.WinRT/FrameworkElementExtensions.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Windows.UI.Xaml;
@@ -71,6 +72,23 @@ namespace Xamarin.Forms.Platform.WinRT
element.SetBinding(GetForegroundProperty(element), binding);
}
+ internal static IEnumerable<T> GetDescendantsByName<T>(this DependencyObject parent, string elementName) where T : DependencyObject
+ {
+ int myChildrenCount = VisualTreeHelper.GetChildrenCount(parent);
+ for (int i = 0; i < myChildrenCount; i++)
+ {
+ var child = VisualTreeHelper.GetChild(parent, i);
+ var controlName = child.GetValue(FrameworkElement.NameProperty) as string;
+ if (controlName == elementName && child is T)
+ yield return child as T;
+ else
+ {
+ foreach (var subChild in child.GetDescendantsByName<T>(elementName))
+ yield return subChild;
+ }
+ }
+ }
+
internal static T GetFirstDescendant<T>(this DependencyObject element) where T : FrameworkElement
{
int count = VisualTreeHelper.GetChildrenCount(element);