示例#1
0
        static async void OnPagePrompt(Page sender, PromptArguments options)
        {
            var promptDialog = new PromptDialog
            {
                Title       = options.Title ?? string.Empty,
                Message     = options.Message ?? string.Empty,
                Input       = options.InitialValue ?? string.Empty,
                Placeholder = options.Placeholder ?? string.Empty,
                MaxLength   = options.MaxLength >= 0 ? options.MaxLength : 0,
                InputScope  = options.Keyboard.ToInputScope()
            };

            if (options.Cancel != null)
            {
                promptDialog.SecondaryButtonText = options.Cancel;
            }

            if (options.Accept != null)
            {
                promptDialog.PrimaryButtonText = options.Accept;
            }

            var currentAlert = s_currentPrompt;

            while (currentAlert != null)
            {
                await currentAlert;
                currentAlert = s_currentPrompt;
            }

            s_currentPrompt = ShowPrompt(promptDialog);
            options.SetResult(await s_currentPrompt.ConfigureAwait(false));
            s_currentPrompt = null;
        }
示例#2
0
            void PresentPrompt(PromptArguments arguments)
            {
                var window = new UIWindow {
                    BackgroundColor = Colors.Transparent.ToNative()
                };

                var alert = UIAlertController.Create(arguments.Title, arguments.Message, UIAlertControllerStyle.Alert);

                alert.AddTextField(uiTextField =>
                {
                    uiTextField.Placeholder            = arguments.Placeholder;
                    uiTextField.Text                   = arguments.InitialValue;
                    uiTextField.ShouldChangeCharacters = (field, range, replacementString) => arguments.MaxLength <= -1 || field.Text.Length + replacementString.Length - range.Length <= arguments.MaxLength;
                    uiTextField.ApplyKeyboard(arguments.Keyboard);
                });

                var oldFrame = alert.View.Frame;

                alert.View.Frame = new RectangleF((float)oldFrame.X, (float)oldFrame.Y, (float)oldFrame.Width, (float)oldFrame.Height - AlertPadding * 2);

                alert.AddAction(CreateActionWithWindowHide(arguments.Cancel, UIAlertActionStyle.Cancel, () => arguments.SetResult(null), window));
                alert.AddAction(CreateActionWithWindowHide(arguments.Accept, UIAlertActionStyle.Default, () => arguments.SetResult(alert.TextFields[0].Text), window));

                PresentPopUp(window, alert);
            }
示例#3
0
        public Task <string> DisplayPromptAsync(string title, string message, string accept = "OK", string cancel = "Cancel", string placeholder = null, int maxLength = -1, Keyboard keyboard = default(Keyboard))
        {
            var args = new PromptArguments(title, message, accept, cancel, placeholder, maxLength, keyboard);

            MessagingCenter.Send(this, PromptSignalName, args);
            return(args.Result.Task);
        }
示例#4
0
            void OnPromptRequested(IView sender, PromptArguments arguments)
            {
                // Verify that the page making the request is part of this activity
                if (!PageIsInThisContext(sender))
                {
                    return;
                }

                var alertDialog = new DialogBuilder(Activity).Create();

                if (alertDialog == null)
                {
                    return;
                }

                alertDialog.SetTitle(arguments.Title);
                alertDialog.SetMessage(arguments.Message);

                var frameLayout = new FrameLayout(Activity);
                var editText    = new EditText(Activity)
                {
                    Hint = arguments.Placeholder, Text = arguments.InitialValue
                };
                var layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent)
                {
                    LeftMargin  = (int)(22 * Activity.Resources.DisplayMetrics.Density),
                    RightMargin = (int)(22 * Activity.Resources.DisplayMetrics.Density)
                };

                editText.LayoutParameters = layoutParams;
                editText.InputType        = arguments.Keyboard.ToInputType();
                if (arguments.Keyboard == Keyboard.Numeric)
                {
                    editText.KeyListener = LocalizedDigitsKeyListener.Create(editText.InputType);
                }

                if (arguments.MaxLength > -1)
                {
                    editText.SetFilters(new IInputFilter[] { new InputFilterLengthFilter(arguments.MaxLength) });
                }

                frameLayout.AddView(editText);
                alertDialog.SetView(frameLayout);

                alertDialog.SetButton((int)DialogButtonType.Positive, arguments.Accept, (o, args) => arguments.SetResult(editText.Text));
                alertDialog.SetButton((int)DialogButtonType.Negative, arguments.Cancel, (o, args) => arguments.SetResult(null));
                alertDialog.SetCancelEvent((o, args) => { arguments.SetResult(null); });

                alertDialog.Window.SetSoftInputMode(SoftInput.StateVisible);
                alertDialog.Show();
                editText.RequestFocus();
            }
示例#5
0
        public Task <string> DisplayPromptAsync(string title, string message, string accept = "OK", string cancel = "Cancel", string placeholder = null, int maxLength = -1, Keyboard keyboard = default(Keyboard), string initialValue = "")
        {
            var args = new PromptArguments(title, message, accept, cancel, placeholder, maxLength, keyboard, initialValue);

            if (IsPlatformEnabled)
            {
                MessagingCenter.Send(this, PromptSignalName, args);
            }
            else
            {
                _pendingActions.Add(() => MessagingCenter.Send(this, PromptSignalName, args));
            }

            return(args.Result.Task);
        }
示例#6
0
            void PresentPrompt(PromptArguments arguments)
            {
                var alert = UIAlertController.Create(arguments.Title, arguments.Message, UIAlertControllerStyle.Alert);

                alert.AddTextField(uiTextField =>
                {
                    uiTextField.Placeholder            = arguments.Placeholder;
                    uiTextField.Text                   = arguments.InitialValue;
                    uiTextField.ShouldChangeCharacters = (field, range, replacementString) => arguments.MaxLength <= -1 || field.Text.Length + replacementString.Length - range.Length <= arguments.MaxLength;
                    uiTextField.ApplyKeyboard(arguments.Keyboard);
                });

                var oldFrame = alert.View.Frame;

                alert.View.Frame = new RectF((float)oldFrame.X, (float)oldFrame.Y, (float)oldFrame.Width, (float)oldFrame.Height - AlertPadding * 2);

                alert.AddAction(UIAlertAction.Create(arguments.Cancel, UIAlertActionStyle.Cancel, _ => arguments.SetResult(null)));
                alert.AddAction(UIAlertAction.Create(arguments.Accept, UIAlertActionStyle.Default, _ => arguments.SetResult(alert.TextFields[0].Text)));

                PresentPopUp(VirtualView, PlatformView, alert);
            }
            async void OnPromptRequested(Page sender, PromptArguments arguments)
            {
                var promptDialog = new PromptDialog
                {
                    Title       = arguments.Title ?? string.Empty,
                    Message     = arguments.Message ?? string.Empty,
                    Input       = arguments.InitialValue ?? string.Empty,
                    Placeholder = arguments.Placeholder ?? string.Empty,
                    MaxLength   = arguments.MaxLength >= 0 ? arguments.MaxLength : 0,
                    // TODO: Implement InputScope property after port the keyboardExtensions
                };

                if (arguments.Cancel != null)
                {
                    promptDialog.SecondaryButtonText = arguments.Cancel;
                }

                if (arguments.Accept != null)
                {
                    promptDialog.PrimaryButtonText = arguments.Accept;
                }

                var currentAlert = CurrentPrompt;

                while (currentAlert != null)
                {
                    await currentAlert;
                    currentAlert = CurrentPrompt;
                }

                // This is a temporary workaround
                promptDialog.XamlRoot = Window.Content.XamlRoot;

                CurrentPrompt = ShowPrompt(promptDialog);
                arguments.SetResult(await CurrentPrompt.ConfigureAwait(false));
                CurrentPrompt = null;
            }
示例#8
0
        void OnPromptRequested(Page sender, PromptArguments args)
        {
            // Verify that the page making the request is child of this platform
            if (!_platform.PageIsChildOfPlatform(sender))
            {
                return;
            }

            var prompt = Native.Dialog.CreateDialog(Forms.NativeParent, (args.Accept != null));

            prompt.Title = args.Title;

            var entry = new Entry
            {
                MinimumWidthRequest = 200,
                HorizontalOptions   = LayoutOptions.FillAndExpand,
                BackgroundColor     = Color.FromRgb(250, 250, 250),
                TextColor           = Color.Black,
                Keyboard            = args.Keyboard,
            };

            if (!string.IsNullOrEmpty(args.Placeholder))
            {
                entry.Placeholder = args.Placeholder;
            }
            if (args.MaxLength > 0)
            {
                entry.MaxLength = args.MaxLength;
            }

            var layout = new StackLayout
            {
                Spacing  = 10,
                Children =
                {
                    new Label
                    {
                        LineBreakMode           = LineBreakMode.CharacterWrap,
                        TextColor               = DeviceInfo.Idiom == DeviceIdiom.Watch ? Color.White : Color.Accent,
                        Text                    = args.Message,
                        HorizontalOptions       = LayoutOptions.FillAndExpand,
                        HorizontalTextAlignment = TextAlignment.Center,
                        FontSize                = Device.GetNamedSize(NamedSize.Subtitle, typeof(Label)),
                    },
                    entry,
                }
            };

            layout.Parent = sender;
            var layoutrenderer = Platform.GetOrCreateRenderer(layout);

            var request = layout.Measure(DeviceInfo.Idiom == DeviceIdiom.Watch ? sender.Width * 0.7 : sender.Width, sender.Height);

            (layoutrenderer as ILayoutRenderer).RegisterOnLayoutUpdated();
            layoutrenderer.NativeView.MinimumHeight = Forms.ConvertToScaledPixel(request.Request.Height);
            layoutrenderer.NativeView.MinimumWidth  = Forms.ConvertToScaledPixel(request.Request.Width);

            prompt.Content = layoutrenderer.NativeView;

            var cancel = new EButton(prompt)
            {
                Text = args.Cancel
            };

            prompt.NegativeButton = cancel;
            cancel.Clicked       += (s, evt) =>
            {
                args.SetResult(null);
                prompt.Dismiss();
            };

            if (args.Accept != null)
            {
                var ok = new EButton(prompt)
                {
                    Text = args.Accept
                };
                prompt.NeutralButton = ok;
                ok.Clicked          += (s, evt) =>
                {
                    args.SetResult(entry.Text);
                    prompt.Dismiss();
                };
            }

            entry.Completed += (s, e) =>
            {
                args.SetResult(entry.Text);
                prompt.Dismiss();
            };

            prompt.BackButtonPressed += (s, evt) =>
            {
                prompt.Dismiss();
            };

            prompt.Show();

            _alerts.Add(prompt);
            prompt.Dismissed += (s, e) => _alerts.Remove(prompt);
        }
示例#9
0
 void OnPromptRequested(IView sender, PromptArguments arguments)
 {
     PresentPrompt(arguments);
 }
示例#10
0
        void OnPromptRequested(Page sender, PromptArguments args)
        {
            // Verify that the page making the request is child of this platform
            if (!PageIsInThisContext(sender))
            {
                return;
            }

            var prompt = Dialog.CreateDialog(MauiContext.GetPlatformParent(), (args.Accept != null));

            prompt.Title = args.Title;

            var entry = new Entry
            {
                MinimumWidthRequest = 200,
                HorizontalOptions   = LayoutOptions.Fill,
                BackgroundColor     = GColor.FromRgb(250, 250, 250),
                TextColor           = GColor.FromRgb(0, 0, 0),
                Keyboard            = args.Keyboard,
            };

            if (!string.IsNullOrEmpty(args.Placeholder))
            {
                entry.Placeholder = args.Placeholder;
            }

            if (args.MaxLength > 0)
            {
                entry.MaxLength = args.MaxLength;
            }

            var layout = new VerticalStackLayout
            {
                Spacing = 10,
            };

            layout.Add(new Label
            {
                LineBreakMode           = LineBreakMode.CharacterWrap,
                TextColor               = Application.AccentColor,
                Text                    = args.Message,
                HorizontalOptions       = LayoutOptions.Fill,
                HorizontalTextAlignment = TextAlignment.Center,
#pragma warning disable CS0612 // Type or member is obsolete
                FontSize = Device.GetNamedSize(NamedSize.Subtitle, typeof(Label)),
#pragma warning disable CS0612 // Type or member is obsolete
            });
            layout.Add(entry);
            layout.Parent = sender;
            var nativeView = layout.ToPlatform(MauiContext);

            var width   = sender.Width <= -1 ? double.PositiveInfinity : sender.Width;
            var height  = sender.Height <= -1 ? double.PositiveInfinity : sender.Height;
            var request = layout.CrossPlatformMeasure(width, height);

            nativeView.MinimumHeight = request.Height.ToScaledPixel();
            nativeView.MinimumWidth  = request.Width.ToScaledPixel();

            prompt.Content = nativeView;

            var cancel = new EButton(prompt)
            {
                Text = args.Cancel
            };
            prompt.NegativeButton = cancel;
            cancel.Clicked       += (s, evt) =>
            {
                args.SetResult(null);
                prompt.Dismiss();
            };

            if (args.Accept != null)
            {
                var ok = new EButton(prompt)
                {
                    Text = args.Accept
                };
                prompt.NeutralButton = ok;
                ok.Clicked          += (s, evt) =>
                {
                    args.SetResult(entry.Text);
                    prompt.Dismiss();
                };
            }

            entry.Completed += (s, e) =>
            {
                args.SetResult(entry.Text);
                prompt.Dismiss();
            };

            prompt.BackButtonPressed += (s, evt) =>
            {
                prompt.Dismiss();
            };

            prompt.Show();

            _alerts.Add(prompt);
            prompt.Dismissed += (s, e) => _alerts.Remove(prompt);
        }