gpt4 book ai didi

c# - Xamarin.Forms 从 mvvm ViewModel 设置焦点

转载 作者:行者123 更新时间:2023-11-30 15:59:04 25 4
gpt4 key购买 nike

我正在使用 Xamarin.Forms 开发聊天应用程序。

而且我想避免在 Entry 失去焦点并单击“发送”按钮时隐藏键盘。

如何在 Android 和 iOS 上执行此操作?

我使用 XF,没有 XAML 的完整 Mvvm(仅 C#)

更新:

在页面类中:

private EntrySetBorder _newMessageEntry;
...
_newMessageEntry = new EntrySetBorder
{
TextColor = Color.Black,
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.End,
Margin = new Thickness(0, 0, 5, 0)
};

在模型类中:

var entry = CurrentPage.FindByName<EntrySetBorder>("_newMessageEntry");
entry.Focus();

最佳答案

这可以通过使用 FindByName<>() 轻松实现。 PCL 中的函数。
这是一种方法:

Entry myEntry = CurrentPage.FindByName<Entry>("YourEntryName");
myEntry.Focus();

您可以在发送按钮的点击处理程序末尾添加它。

编辑:

在您的情况下,我认为您的问题是您的条目设置为 private ,所以我建议将其公开为 public或使用其他公共(public)属性(property)公开它。两种可能有效的解决方案:

public EntrySetBorder _newMessageEntry;
...
_newMessageEntry = new EntrySetBorder
{

TextColor = Color.Black,
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.End,
Margin = new Thickness(0, 0, 5, 0)
};

和:

EntrySetBorder entry = CurrentPage.FindByName<EntrySetBorder>("_newMessageEntry");
entry.Focus();

或者你这样做:

private EntrySetBorder _newMessageEntry;
...
_newMessageEntry = new EntrySetBorder
{

TextColor = Color.Black,
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.End,
Margin = new Thickness(0, 0, 5, 0)
};
public EntrySetBorder NewMessageEntry => _newMessageEntry;

和:

EntrySetBorder entry = CurrentPage.FindByName<EntrySetBorder>("NewMessageEntry");
entry.Focus();

请试试 :)

编辑 2:

在检查您的代码并对其进行测试后,最终修复它的方法是将 Entry 作为参数发送到您正在使用的命令中,例如:

在您正在创建的页面内:

sendButton.CommandParameter = NewMessageEntry; // We're adding the Entry we want to focus as a command parameter.

在您的 PageModel 和我们要使用的命令中:

public Command SendCommand
{
get
{
return new Command<Entry>((obj) => //obj here means the parameters we're sending I.E: the entry we set it in the page.
{
//The code you want to execute
Entry entry = obj;
entry.Focus();
});
}
}

请注意,我使用了 Entry因为我没有你的自定义条目的所有实现。

关于c# - Xamarin.Forms 从 mvvm ViewModel 设置焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42176182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com