我基本上是在聊天功能,这就是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中发送文本。
我想模仿聊天应用程序标准,其中按下发送按钮不会失焦或隐藏键盘。
不幸的是,现在当我按下发送按钮时 - 它会自动将键盘从输入单元中取消聚焦。
我为防止这种情况而采取的初步措施是在ViewModel SendMessageCommand上进行的:
var chatEntry = CurrentPage.FindByName<Entry>("ChatField");
chatEntry.Focus();
但这会导致推送所有列表视图的奇怪行为。
答案 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(透明背景)放在按钮上。
祝你好运, 马可