繁体   English   中英

尝试将焦点集中在xamarin.forms中时,字段初始值设定项无法引用非静态字段,方法或属性错误

[英]A field initializer cannot reference the non-static field, method, or property error when trying to focus an entry in xamarin.forms

我正在开发xamarin.forms应用程序,但出现此错误,我无法找到解决方案

public MyClass()
    {
            InitializeComponent();

            entry2.OnBackspace += backspaceEventHandler;
    }

在backspaceEventHandler方法中,我尝试编写类似这样的内容

private static BackspaceEventHandler backspaceEventHandler = (sender, e) =>
    {
            entry1.Focus();
    };

我的entry1标签是这样的

<StackLayout>
    <entry x:FieldModifier="Public" x:Name="entry1" HorizontalTextAlignment="Center" Text="{Binding entry1Text}"/>
</StackLayout>

在这里,它在entry1.Focus()语句中显示错误,这是什么原因,我该如何解决?

谢谢。

与其使用lambda表达式初始化backspaceEventHandler ,不如将其编写为方法,或者将其完全删除,然后直接将事件处理程序直接初始化为lambda即可。 另外,删除static关键字-正如我在评论中所写的-如果没有引用特定实例,则静态成员不能访问实例成员。

这是应该解决该问题的两个版本的代码:

public MyClass()
{
    InitializeComponent();
    entry2.OnBackspace += (sender, e) => entry1.Focus();
}

我不确定事件处理程序的签名应该是什么,但是假设object sender, EventArgs e还有另一个选择:

public MyClass()
{
    InitializeComponent();
    entry2.OnBackspace += BackspaceEventHandler ;
}

private void BackspaceEventHandler(object sender, EventArgs e)
{
    entry1.Focus();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM