[UWP] Remove old appbar code in Platform (#3409)

* Remove unused option for Platform to add toolbars to any page;

* Remove IPlatform interface

* Reinstate OnBackRequested method
This commit is contained in:
E.Z. Hart 2018-08-08 03:03:44 -06:00 коммит произвёл Rui Marinho
Родитель 8a760480a2
Коммит b25ca40edb
2 изменённых файлов: 18 добавлений и 111 удалений

Просмотреть файл

@ -14,9 +14,8 @@ using Xamarin.Forms.Internals;
namespace Xamarin.Forms.Platform.UWP
{
public abstract class Platform : IPlatform, INavigation, IToolbarProvider
public abstract class Platform : IPlatform, INavigation
{
IToolbarProvider _toolbarProvider;
static Task<bool> s_currentAlert;
internal static StatusBar MobileStatusBar => ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar") ? StatusBar.GetForCurrentView() : null;
@ -309,16 +308,9 @@ namespace Xamarin.Forms.Platform.UWP
UpdateToolbarTracker();
UpdateToolbarTitle(newPage);
await UpdateToolbarItems();
}
Task<CommandBar> IToolbarProvider.GetCommandBarAsync()
{
return GetCommandBarAsync();
}
async void OnToolbarItemsChanged(object sender, EventArgs e)
{
await UpdateToolbarItems();
@ -379,38 +371,30 @@ namespace Xamarin.Forms.Platform.UWP
}
}
void UpdateToolbarTitle(Page page)
{
if (_toolbarProvider == null)
return;
((ToolbarProvider)_toolbarProvider).CommandBar.Content = page.Title;
}
internal async Task UpdateToolbarItems()
{
CommandBar commandBar = await GetCommandBarAsync();
if (commandBar != null)
var toolbarProvider = GetToolbarProvider();
if (toolbarProvider == null)
{
commandBar.PrimaryCommands.Clear();
commandBar.SecondaryCommands.Clear();
if (_page.BottomAppBar != null || _page.TopAppBar != null)
{
_page.BottomAppBar = null;
_page.TopAppBar = null;
_page.InvalidateMeasure();
}
return;
}
var toolBarProvider = GetToolbarProvider() as IToolBarForegroundBinder;
CommandBar commandBar = await toolbarProvider.GetCommandBarAsync();
if (commandBar == null)
{
return;
}
commandBar.PrimaryCommands.Clear();
commandBar.SecondaryCommands.Clear();
var toolBarForegroundBinder = GetToolbarProvider() as IToolBarForegroundBinder;
foreach (ToolbarItem item in _toolbarTracker.ToolbarItems.OrderBy(ti => ti.Priority))
{
if (commandBar == null)
commandBar = CreateCommandBar();
toolBarProvider?.BindForegroundColor(commandBar);
toolBarForegroundBinder?.BindForegroundColor(commandBar);
var button = new AppBarButton();
button.SetBinding(AppBarButton.LabelProperty, "Text");
@ -421,7 +405,7 @@ namespace Xamarin.Forms.Platform.UWP
ToolbarItemOrder order = item.Order == ToolbarItemOrder.Default ? ToolbarItemOrder.Primary : item.Order;
if (order == ToolbarItemOrder.Primary)
{
toolBarProvider?.BindForegroundColor(button);
toolBarForegroundBinder?.BindForegroundColor(button);
commandBar.PrimaryCommands.Add(button);
}
else
@ -429,37 +413,6 @@ namespace Xamarin.Forms.Platform.UWP
commandBar.SecondaryCommands.Add(button);
}
}
if (commandBar?.PrimaryCommands.Count + commandBar?.SecondaryCommands.Count == 0)
ClearCommandBar();
}
void ClearCommandBar()
{
if (_toolbarProvider != null)
{
_toolbarProvider = null;
if (Device.Idiom == TargetIdiom.Phone)
_page.BottomAppBar = null;
else
_page.TopAppBar = null;
}
}
CommandBar CreateCommandBar()
{
var bar = new FormsCommandBar();
if (Device.Idiom != TargetIdiom.Phone)
bar.Style = (Windows.UI.Xaml.Style)Windows.UI.Xaml.Application.Current.Resources["TitleToolbar"];
_toolbarProvider = new ToolbarProvider(bar);
if (Device.Idiom == TargetIdiom.Phone)
_page.BottomAppBar = bar;
else
_page.TopAppBar = bar;
return bar;
}
internal IToolbarProvider GetToolbarProvider()
@ -477,23 +430,9 @@ namespace Xamarin.Forms.Platform.UWP
element = pageContainer?.CurrentPage;
}
if (provider != null && _toolbarProvider == null)
ClearCommandBar();
return provider;
}
async Task<CommandBar> GetCommandBarAsync()
{
IToolbarProvider provider = GetToolbarProvider();
if (provider == null)
{
return null;
}
return await provider.GetCommandBarAsync();
}
internal static void SubscribeAlertsAndActionSheets()
{
MessagingCenter.Subscribe<Page, AlertArguments>(Window.Current, Page.AlertSignalName, OnPageAlert);
@ -562,31 +501,12 @@ namespace Xamarin.Forms.Platform.UWP
return result == ContentDialogResult.Primary;
}
class ToolbarProvider : IToolbarProvider
{
readonly Task<CommandBar> _commandBar;
public ToolbarProvider(CommandBar commandBar)
{
_commandBar = Task.FromResult(commandBar);
}
public CommandBar CommandBar => _commandBar.Result;
public Task<CommandBar> GetCommandBarAsync()
{
return _commandBar;
}
}
void OnBackRequested(object sender, BackRequestedEventArgs e)
{
Application app = Application.Current;
Page page = app?.MainPage;
if (page == null)
return;
e.Handled = BackButtonPressed();
}
}

Просмотреть файл

@ -147,19 +147,6 @@
<SolidColorBrush x:Key="TabButtonPointerOverBackgroundBrush" Color="#44888888" />
<SolidColorBrush x:Key="TabButtonBackgroundBrush" Color="#29888888" />
<Style x:Key="TitleToolbar" TargetType="uwp:FormsCommandBar">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<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>
</Style>
<Style x:Key="FormsListViewItem" TargetType="ListViewItem">
<Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
<Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />