我正在开发一个 Windows Phone 8 应用程序,我需要在显示键盘时进行一些自定义处理。有什么方法可以让我在当前方向上获得键盘的高度。
谢谢
我在 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;
}
在 XAML 框架中没有执行此操作的好方法,尽管您可以在触发TextBox.GotFocus
事件时简单地触发您的代码。最简单的方法就是子类化并在触发父事件时触发TextBox
您自己的自定义事件。GotFocus
如果您正在编写一个纯原生应用程序,那么您可以通过检查窗口的遮挡区域来找到它。这方面的一个例子可以在末尾找到:http: //msdn.microsoft.com/en-us/library/windowsphone/develop/jj247546 (v=vs.105).aspx
没有很好的方法来获取键盘的实际高度,但是如果键盘导致屏幕滚动是因为文本框位于下半部分,您可以通过查看根框架的抵消。
有关更多详细信息/代码,请参阅如何确定键盘偏移量。
对于 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);
}