summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.UAP/FormsCommandBar.cs
diff options
context:
space:
mode:
authorE.Z. Hart <hartez@users.noreply.github.com>2016-12-02 13:48:42 -0700
committerRui Marinho <me@ruimarinho.net>2016-12-02 20:48:42 +0000
commit4df66d139f8128486b3e34e1c206413abd1babd5 (patch)
tree3a7e1581240872ce3fff0559524cc6092d45014f /Xamarin.Forms.Platform.UAP/FormsCommandBar.cs
parentbadc701871a1190d6acb3495d3cefa93cff810c5 (diff)
downloadxamarin-forms-4df66d139f8128486b3e34e1c206413abd1babd5.tar.gz
xamarin-forms-4df66d139f8128486b3e34e1c206413abd1babd5.tar.bz2
xamarin-forms-4df66d139f8128486b3e34e1c206413abd1babd5.zip
Allow CommandBar to expand and show command labels (#594)
* Allow CommandBar to expand and show command labels Consolidate command bar placement code * Make title text wrapping consistent between NavigationPage and MasterDetailPage * Align toolbar/navigation bar behavior with other platforms
Diffstat (limited to 'Xamarin.Forms.Platform.UAP/FormsCommandBar.cs')
-rw-r--r--Xamarin.Forms.Platform.UAP/FormsCommandBar.cs79
1 files changed, 76 insertions, 3 deletions
diff --git a/Xamarin.Forms.Platform.UAP/FormsCommandBar.cs b/Xamarin.Forms.Platform.UAP/FormsCommandBar.cs
index 21e9ca16..41451864 100644
--- a/Xamarin.Forms.Platform.UAP/FormsCommandBar.cs
+++ b/Xamarin.Forms.Platform.UAP/FormsCommandBar.cs
@@ -1,18 +1,30 @@
-using Windows.Foundation.Collections;
+using System;
+using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
+using Windows.UI.Xaml.Data;
namespace Xamarin.Forms.Platform.UWP
{
public class FormsCommandBar : CommandBar
{
- // TODO Once 10.0.14393.0 is available, enable dynamic overflow: https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.commandbar.isdynamicoverflowenabled.aspx
+ // TODO Once 10.0.14393.0 is available (and we don't have to support lower versions), enable dynamic overflow: https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.commandbar.isdynamicoverflowenabled.aspx
+ Windows.UI.Xaml.Controls.Button _moreButton;
+
public FormsCommandBar()
{
PrimaryCommands.VectorChanged += OnCommandsChanged;
SecondaryCommands.VectorChanged += OnCommandsChanged;
UpdateVisibility();
+ WatchForContentChanges();
+ }
+
+ protected override void OnApplyTemplate()
+ {
+ base.OnApplyTemplate();
+
+ _moreButton = GetTemplateChild("MoreButton") as Windows.UI.Xaml.Controls.Button;
}
void OnCommandsChanged(IObservableVector<ICommandBarElement> sender, IVectorChangedEventArgs args)
@@ -22,7 +34,68 @@ namespace Xamarin.Forms.Platform.UWP
void UpdateVisibility()
{
- Visibility = PrimaryCommands.Count + SecondaryCommands.Count > 0 ? Visibility.Visible : Visibility.Collapsed;
+ var visibility = PrimaryCommands.Count + SecondaryCommands.Count > 0 ? Visibility.Visible : Visibility.Collapsed;
+
+ if (_moreButton != null)
+ {
+ // The "..." button should only be visible if we have commands to display
+ _moreButton.Visibility = visibility;
+
+ // There *is* an OverflowButtonVisibility property that does more or less the same thing,
+ // but it became available in 10.0.14393.0 and we have to support 10.0.10240
+ }
+
+ // If we have a title (or some other content) inside this command bar
+ // and that content is not collapsed
+ var frameworkElement = Content as FrameworkElement;
+
+ // Temporarily tie the visibility of the toolbar to the visibility of the Title
+ // to be consistent with the old style / other platforms
+ if (frameworkElement != null && frameworkElement.Visibility == Visibility.Collapsed)
+ {
+ Visibility = Visibility.Collapsed;
+ return;
+ }
+
+ if (frameworkElement != null && frameworkElement.Visibility != Visibility.Collapsed)
+ {
+ Visibility = Visibility.Visible;
+ }
+ else
+ {
+ // Otherwise, collapse it if there are no commands
+ Visibility = visibility;
+ }
+ }
+
+ void WatchForContentChanges()
+ {
+ // If the content of the command bar changes while it's collapsed, we need to
+ // react and update the visibility (e.g., if the bar is placed at the bottom and
+ // has no commands, then is moved to the top and now includes the title)
+
+ // There's no event on CommandBar when the content changes, so we'll bind our own
+ // dependency property to Content and update our visibility when it changes
+ var binding = new Windows.UI.Xaml.Data.Binding
+ {
+ Source = this,
+ Path = new PropertyPath(nameof(Content)),
+ Mode = Windows.UI.Xaml.Data.BindingMode.OneWay
+ };
+
+ BindingOperations.SetBinding(this, s_contentChangeWatcher, binding);
+ }
+
+ static readonly DependencyProperty s_contentChangeWatcher =
+ DependencyProperty.Register(
+ "ContentChangeWatcher",
+ typeof(object),
+ typeof(object),
+ new PropertyMetadata(null, ContentChanged));
+
+ static void ContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ (d as FormsCommandBar)?.UpdateVisibility();
}
}
} \ No newline at end of file