4

我正在开发一个 Windows Phone 8 应用程序,我需要在显示键盘时进行一些自定义处理。有什么方法可以让我在当前方向上获得键盘的高度。

谢谢

4

4 回答 4

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;

    }
于 2015-05-24T14:20:34.150 回答
1

在 XAML 框架中没有执行此操作的好方法,尽管您可以在触发TextBox.GotFocus事件时简单地触发您的代码。最简单的方法就是子类化并在触发父事件时触发TextBox您自己的自定义事件。GotFocus

如果您正在编写一个纯原生应用程序,那么您可以通过检查窗口的遮挡区域来找到它。这方面的一个例子可以在末尾找到:http: //msdn.microsoft.com/en-us/library/windowsphone/develop/jj247546 (v=vs.105).aspx

于 2013-06-27T04:38:43.357 回答
1

没有很好的方法来获取键盘的实际高度,但是如果键盘导致屏幕滚动是因为文本框位于下半部分,您可以通过查看根框架的抵消。

有关更多详细信息/代码,请参阅如何确定键盘偏移量。

于 2015-05-16T13:33:00.657 回答
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);
}
于 2016-03-28T20:49:52.803 回答