diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue7992.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue7992.cs new file mode 100644 index 00000000000..7f4abf1ef15 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue7992.cs @@ -0,0 +1,49 @@ +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + +namespace Xamarin.Forms.Controls.Issues +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Github, 7992, "Datepicker is not opened when we call Datepicker.Focus() in UWP", PlatformAffected.UWP)] + + public class Issue7992 : TestContentPage + { + protected override void Init() + { + var stackLayout = new StackLayout(); + Content = stackLayout; + + stackLayout.Children.Add(new Label + { + Text = "Label to keep picker from getting initial focus" + }); + + var datePicker = new DatePicker(); + stackLayout.Children.Add(datePicker); + + var buttonFocus = new Button + { + Text = "Calls Focus() on the date picker, which should open a date picker flyout." + }; + buttonFocus.Clicked += (s, e) => + { + datePicker.IsVisible = true; + datePicker.Focus(); + }; + stackLayout.Children.Add(buttonFocus); + + var buttonNotVisible = new Button + { + Text = "Makes the picker not visible and calls Focus(), which should open a full screen picker flyout." + }; + buttonNotVisible.Clicked += (s, e) => + { + datePicker.IsVisible = false; + datePicker.Focus(); + }; + stackLayout.Children.Add(buttonNotVisible); + + } + + } +} diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index c458f0543b0..26b95f1d6f3 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -112,6 +112,7 @@ Code + Code @@ -1758,4 +1759,4 @@ MSBuild:Compile - + \ No newline at end of file diff --git a/Xamarin.Forms.Platform.UAP/DatePickerRenderer.cs b/Xamarin.Forms.Platform.UAP/DatePickerRenderer.cs index 9902583414b..3a8457b5d48 100644 --- a/Xamarin.Forms.Platform.UAP/DatePickerRenderer.cs +++ b/Xamarin.Forms.Platform.UAP/DatePickerRenderer.cs @@ -4,6 +4,7 @@ using Windows.UI.Text; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Documents; using Windows.UI.Xaml.Media; using Xamarin.Forms.Internals; @@ -65,6 +66,18 @@ void ControlOnLoaded(object sender, RoutedEventArgs routedEventArgs) UpdateTextColor(); } + internal override void OnElementFocusChangeRequested(object sender, VisualElement.FocusRequestArgs args) + { + base.OnElementFocusChangeRequested(sender, args); + + // Show a picker fly out on focus to match iOS and Android behavior + var flyout = new DatePickerFlyout { Placement = FlyoutPlacementMode.Bottom, Date = Control.Date }; + flyout.DatePicked += (p, e) => Control.Date = p.Date; + if (!Element.IsVisible) + flyout.Placement = FlyoutPlacementMode.Full; + flyout.ShowAt(Control); + } + void WireUpFormsVsm() { if (!Element.UseFormsVsm())