summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.WinRT
diff options
context:
space:
mode:
authorPaul DiPietro <pauldipietro@users.noreply.github.com>2017-03-20 10:48:28 -0500
committerJason Smith <jason.smith@xamarin.com>2017-03-20 08:48:28 -0700
commit04d034057c9743712d826c290bf9b1f2a0dd7924 (patch)
treecffc1f68e2c54185940df469d12724ca1c87b406 /Xamarin.Forms.Platform.WinRT
parent5ca7259959022253c6a71c5290854929291caec5 (diff)
downloadxamarin-forms-04d034057c9743712d826c290bf9b1f2a0dd7924.tar.gz
xamarin-forms-04d034057c9743712d826c290bf9b1f2a0dd7924.tar.bz2
xamarin-forms-04d034057c9743712d826c290bf9b1f2a0dd7924.zip
[WinRT/UWP] Open Picker dropdown when calling Focus (#762)
Diffstat (limited to 'Xamarin.Forms.Platform.WinRT')
-rw-r--r--Xamarin.Forms.Platform.WinRT/PickerRenderer.cs19
1 files changed, 19 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.WinRT/PickerRenderer.cs b/Xamarin.Forms.Platform.WinRT/PickerRenderer.cs
index a7aa16f0..d4ee918e 100644
--- a/Xamarin.Forms.Platform.WinRT/PickerRenderer.cs
+++ b/Xamarin.Forms.Platform.WinRT/PickerRenderer.cs
@@ -19,6 +19,7 @@ namespace Xamarin.Forms.Platform.WinRT
{
bool _isAnimating;
Brush _defaultBrush;
+ bool _dropDownWasOpened;
protected override void Dispose(bool disposing)
{
@@ -32,6 +33,7 @@ namespace Xamarin.Forms.Platform.WinRT
Control.DropDownClosed -= OnDropDownOpenStateChanged;
Control.OpenAnimationCompleted -= ControlOnOpenAnimationCompleted;
Control.Loaded -= ControlOnLoaded;
+ Control.GotFocus -= ControlOnGotFocus;
}
}
@@ -51,6 +53,7 @@ namespace Xamarin.Forms.Platform.WinRT
Control.OpenAnimationCompleted += ControlOnOpenAnimationCompleted;
Control.ClosedAnimationStarted += ControlOnClosedAnimationStarted;
Control.Loaded += ControlOnLoaded;
+ Control.GotFocus += ControlOnGotFocus;
}
Control.ItemsSource = ((LockableObservableListWrapper)Element.Items)._list;
@@ -102,6 +105,19 @@ namespace Xamarin.Forms.Platform.WinRT
}
}
+ void ControlOnGotFocus(object sender, RoutedEventArgs routedEventArgs)
+ {
+ // The FormsComboBox is separate from the Popup/dropdown that it uses to select an item,
+ // and the behavior here is changed to be similar to the other platforms where focusing the
+ // Picker opens the dropdown (with the exception where if focus was given via keyboard, such
+ // as tabbing through controls). The _dropDownWasOpened flag is reset to false in the case that
+ // the FormsComboBox regained focus after the dropdown closed.
+ if (!_dropDownWasOpened && Control.FocusState != FocusState.Keyboard)
+ Control.IsDropDownOpen = true;
+ else
+ _dropDownWasOpened = false;
+ }
+
void OnControlSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (Element != null)
@@ -129,6 +145,9 @@ namespace Xamarin.Forms.Platform.WinRT
_isAnimating = false;
// and force the final redraw
((IVisualElementController)Element)?.InvalidateMeasure(InvalidationTrigger.MeasureChanged);
+
+ // Related to ControlOnGotFocus, _dropDownWasOpened is set to true
+ _dropDownWasOpened = true;
}
}