2013-06-27 4 views
4

Я работаю над приложением Windows Phone 8, когда мне нужно сделать какую-то специальную обработку при отображении клавиатуры. Есть ли способ, которым я могу получить высоту клавиатуры в текущей ориентации.Windows Phone Получить высоту клавиатуры

Благодаря

ответ

1

Там нет хороший способ сделать это в рамках XAML, хотя вы можете просто запустить свой код всякий раз, когда TextBox.GotFocus событие. Самый простой способ сделать это - просто подкласс TextBox и запустить собственное собственное событие, когда инициируется событие родителя GotFocus.

Если вы пишете собственное приложение, вы можете найти это, проверив окклюзионную область вашего окна. Пример этого можно найти прямо в конце: http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247546(v=vs.105).aspx

+0

Я попытался обработать события GotFocus и LostFocus для TextBox, но в обоих случаях он просто говорит, что высота OccdedRect равна 0.0. Кроме того, я попытался обработать InputPane.GetForCurrentView(). Отображение события, но это никогда не срабатывает. –

+0

Я не верю, что InputPane корректно работает с XAML (не пробовал родной, он должен работать там). Моя идея заключалась в том, что вы узнаете, когда это произойдет, а затем настройте свои высоты на основе размера клавиатуры (что относительно сложно). – Oren

+0

Что делать, если устройство имеет аппаратную клавиатуру? –

1

Невозможно получить фактическую высоту клавиатуры, но если клавиатура заставила экран прокручиваться, потому что текстовое поле было на нижней половине, вы можете узнать, насколько далеко прокручивается, глядя на смещение корневого кадра.

Для получения более подробной информации/кода см. How to determine the keyboard offset.

2

Мне удалось это сделать в Windows Phone 8.1, но осталось не так много места для текстового поля с кнопкой сохранения внизу и верхними заголовками выше.

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <!--ScrollViewer Background="#302010" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"--> 
     <TextBox x:Name="text" 
        ManipulationDelta="textList_ManipulationDelta" ManipulationMode="Scale" 
        HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
        TextWrapping="Wrap" AcceptsReturn="True" 
        > 
     </TextBox> 
    <Rectangle x:Name="rectRed" Fill="Red" Grid.Row="2" Height="10" /> 
    <Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="1" Fill="#30000000" /> 
    <StackPanel x:Name="stackAppBar" Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center"> 
     <AppBarButton Icon="Save" Label="Save" IsCompact="true" x:Name="buttonSave" Click="buttonSave_Click"/> 
     <!--AppBarButton Icon="Delete" Label="Delete" IsCompact="true"/--> 
    </StackPanel> 
    <!--Rectangle x:Name="rectKeyboard" Fill="Red" Grid.Row="2" Height="200" /--> 
</Grid> 

async void UCSetup_Loaded(object sender, RoutedEventArgs e) 
    { 
     // put text in box 
     string s = await IO.ReadSetupFile(); 
     text.Text = s; 

     InputPane.GetForCurrentView().Showing += UCSetup_Showing; 
     InputPane.GetForCurrentView().Hiding += UCSetup_Hiding; 
    } 

    void UCSetup_Hiding(InputPane sender, InputPaneVisibilityEventArgs args) 
    { 
     var size = args.OccludedRect; 
     rectRed.Height = size.Height; 

    } 

    void UCSetup_Showing(InputPane sender, InputPaneVisibilityEventArgs args) 
    { 
     var size = args.OccludedRect; 
     rectRed.Height = size.Height; 

    } 
0

Для Windows Phone 8.1 RT просто добавьте следующий код в свой файл xaml.cs.

// This part in the constructor of the page 
InputPane inputPane = InputPane.GetForCurrentView(); 
inputPane.Showing += InputPane_Showing; 
inputPane.Hiding += InputPane_Hiding; 

private void InputPane_Hiding(InputPane sender, InputPaneVisibilityEventArgs args) { 
    // Do what you want. 
} 

private void InputPane_Showing(InputPane sender, InputPaneVisibilityEventArgs args) { 
    Debug.WriteLine("Keyboard Height: "sender.OccludedRect.Height); 
} 
Смежные вопросы