Xamarin Forms - предотвращение отображения клавиатуры при фокусе ввода в UWP, Android, iOS - PullRequest
0 голосов
/ 23 ноября 2018

В Xamarin.Forms я могу предотвратить всплывающее окно клавиатуры, когда представление Entry получает фокус, создавая собственные средства визуализации и используя ShowSoftInputOnFocus для Android и InputView для iOS.

Но что можно использовать, чтобы предотвратить это в UWP

1 Ответ

0 голосов
/ 23 ноября 2018

предотвращает всплывающее окно клавиатуры, когда представление ввода получает фокус

UWP имеет прямую поддержку API для скрытия и отображения InputPane .Вы можете вызвать TryHide метод, чтобы скрыть клавиатуру.Для xamarin вы можете использовать DependencyService, чтобы приблизиться.Для получения дополнительной информации см. Следующий код.

Интерфейс

public interface IKeyboard
{
    void HideKeyboard();
    void ShowKeyboard();
    void RegisterAction(Action<object, KeyboardState> callback);
}
public enum KeyboardState
{
    Hide,
    Show
}

KeyboardImplementation.cs

public class KeyboardImplementation : IKeyboard
{
    private InputPane _inputPane;
    private Action<object, KeyboardState> action;

    public KeyboardImplementation()
    {
        _inputPane = InputPane.GetForCurrentView();
        _inputPane.Showing += OnInputPaneShowing;
        _inputPane.Hiding += OnInputPaneHiding;
    }
    public void HideKeyboard()
    {
        _inputPane.TryHide();
    }
    public void ShowKeyboard()
    {
        _inputPane.TryShow();
    }
    public void RegisterAction(Action<object, KeyboardState> callback)
    {
        action = callback;
    }

    private void OnInputPaneHiding(InputPane sender, InputPaneVisibilityEventArgs args)
    {
        action(this, KeyboardState.Hide);
    }

    private void OnInputPaneShowing(InputPane sender, InputPaneVisibilityEventArgs args)
    {
        action(this, KeyboardState.Show);
    }
}

Использование

DependencyService.Get<IKeyboard>().RegisterAction((s,e)=> {
    if (e == KeyboardState.Show)
    {
        var keyboard = s as IKeyboard;
        keyboard.HideKeyboard();
    }
});
...