UWP: программная клавиатура не прокручивает сфокусированный TextBox (вложенный в FlipView) в вид

Я думал, что это довольно стандартно, чтобы получить

«прокрутить текстовое поле в поле зрения, когда появится программная клавиатура»

но чем больше времени я трачу на решение этой задачи, тем больше мне кажется, что я делю на ноль.

Я написал приложение с флип-представлением, заполненным программно созданными страницами.

Мое приложение использует ViewModelFirst, поэтому представления Xaml загружаются из ResourceDictionary через DataTemplateSelector.

Текстовое поле в нижней части MainPage (страница xaml, а не из ResourceDictionary) работает.

Как только страница поступает из DataTemplateSelector (и, следовательно, обязательно из ResourceDictionary), она ведет себя не так, как ожидалось.

Кстати: я решил пойти по пути ResourceDictionary, потому что мне казалось невозможным получить DataTemplate из xaml-страницы. Если кто-то знает, как это сделать, подскажите :)

Итак, вот мой пример проекта: https://drive.google.com/file/d/0BzDVtvE9NKaMd2dBMWMzTWJtN1E/view?usp=sharing

Спасибо всем заранее

С уважением Алекс


person Eden Cerberus    schedule 26.09.2017    source источник
comment
@Scavenger Как я могу это сделать? Я нашел только примеры для Xamarin-lib.   -  person Eden Cerberus    schedule 28.09.2017


Ответы (1)


Я решил это, изменив ItemsPanel FlipView на StackPanel с горизонтальной прокруткой. По умолчанию используется VirtualizingStackPanel.

Мой метод выглядит так:

private ItemsPanelTemplate GetItemsPanelTemplate() {
            string xaml = "<ItemsPanelTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'><StackPanel Orientation='Horizontal' AreScrollSnapPointsRegular='True' /></ItemsPanelTemplate>";
            return XamlReader.Load(xaml) as ItemsPanelTemplate;
        }

И я вызываю этот метод так:

Flip.ItemsPanel = GetItemsPanelTemplate();

И здесь я должен поблагодарить feO2x (https://stackoverflow.com/users/1560623/feo2x) за его запись в его блог (http://www.feo2x.com/posts/2015-12-06-flipview-and-problems-with-input-controls-part-1/)

Но имейте в виду: согласно сообщению в блоге feO2x, VirtualizingStackPanel использует своего рода ленивую загрузку, а используемая сейчас (стандартная) StackPanel — нет. Так что может быть медленнее.

Я надеюсь, это может помочь кому-то.

person Deus Vult    schedule 16.10.2017