如何防止Xamarin.Forms.Entry键盘在按下按钮时取消焦点

时间:2016-11-13 08:12:14

标签: c# xaml xamarin xamarin.forms

我基本上是在聊天功能,这就是XAML代码段的样子:

<StackLayout Grid.Row="1" Orientation="Horizontal" HeightRequest="50">
    <Entry x:Name="ChatField" Text="{Binding CurrentMessageText}" Placeholder="{Binding MessageTextPlaceHolder}" HorizontalOptions="FillAndExpand"/>
    <Button Text="send" BackgroundColor="Transparent" Command="{Binding SendMessageCommand}"/>
</StackLayout>

我有一个Entry控件和一个按钮控件绑定到一个命令,该命令在chatfield中发送文本。

我想模仿聊天应用程序标准,其中按下发送按钮不会失焦或隐藏键盘。

enter image description here

不幸的是,现在当我按下发送按钮时 - 它会自动将键盘从输入单元中取消聚焦。

我为防止这种情况而采取的初步措施是在ViewModel SendMessageCommand上进行的:

var chatEntry = CurrentPage.FindByName<Entry>("ChatField");
chatEntry.Focus();

但这会导致推送所有列表视图的奇怪行为。

enter image description here

3 个答案:

答案 0 :(得分:4)

在IOS上使用自定义渲染器解决了这个问题:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textv1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textv2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textv3"
        android:layout_width="match_parent"
        android:layout_height="55dp" />

</LinearLayout>   

它的作用是它基本上使用Control的#EndEndEditing事件,该事件在EditText失去焦点或其键盘即将未聚焦时触发。

答案 1 :(得分:0)

当存在2种方式时,请注意当您按下另一个条目(或编辑器)键盘时仍然需要删除发送按钮并在那里放置另一个条目。只是通过焦点

et2.Focused += delegate { et1.Focus(); };

另一种方法是使用一个Mr.Gestures.Entry(或编辑器)并进行填充(android ios自定义渲染)并检查e.Touches[0].X

但这种方式需要调用iOS [粘贴]菜单上的隐藏条目原因才能传递焦点

答案 2 :(得分:0)

最简单的方法是使用与按钮不同的项目(例如BoxView)并在其上附加TapGestureListener。

如果您想保留按钮的外观,可以将BoxView(透明背景)放在按钮上。

祝你好运, 马可