为啥 Completed 事件发生在 Focus() 上?

Posted

技术标签:

【中文标题】为啥 Completed 事件发生在 Focus() 上?【英文标题】:Why the Completed event occur on Focus()?为什么 Completed 事件发生在 Focus() 上? 【发布时间】:2017-05-12 09:48:17 【问题描述】:

当控件具有焦点(条目)时触发的 Completed 事件上的 Xamarin 表单存在一些问题

下面是视图:

  <Entry
                x:Name="EntryOrderNumber"
                Placeholder="MFGO Number"
                Text="Binding TextOrderEntry" />

  <Entry
                x:Name="EntryMachineNumber"
                Placeholder="Machine Number"
                Text="Binding TextMachineEntry" />

这是我控制放置在 view.cs 中的偶数的地方

public ProductionOrderPage()
        
            InitializeComponent();
            BindingContext = App.Locator.ProductionOrderPageVM;
            EntryOrderNumber.Completed += EntryOrderNumber_Completed;
            EntryMachineNumber.Completed += EntryMachineNumber_Completed;
            EntryTotalPosition.Completed += EntryTotalPosition_Completed;


        

        private void EntryMachineNumber_Completed(object sender, EventArgs e)
        
            EntryMachineNumber.Unfocus();         
            EntryTotalPosition.Focus();
        

        private void EntryOrderNumber_Completed(object sender, EventArgs e)
        
            EntryOrderNumber.Unfocus();            
            EntryMachineNumber.Focus();
        

我的问题是:当条目(文本字段)已聚焦时,已触发 Completed 事件,导致焦点将按照 Completed 事件中的设置连续转到另一个字段。

正在调试并部署到模拟器上的应用

使用 MVVMlight

非常感谢

【问题讨论】:

我无法使用纯 Xamarin.Form 绑定重现这一点,即不使用 MVVMLight。在我的测试中 Completed 事件仅在用户按下返回时触发。我想知道 MVVMLight 在设置绑定时是否以某种方式插入了返回字符,从而导致 Completed 事件触发? 当我做一些其他细节测试时,看起来 Return 键实际上执行了两次。 【参考方案1】:

使用软键盘代替硬件键盘可以解决这个问题。很奇怪。

启用软键盘:Visual Studio android Emulator Display Keyboard

【讨论】:

以上是关于为啥 Completed 事件发生在 Focus() 上?的主要内容,如果未能解决你的问题,请参考以下文章

WCF 的 Completed 事件中的异常处理

详说jQuery的focus()blur()事件

为啥100 percent completed开不了机

4事件

使用 RxMoya 在 RxSwift 上未获得 Completed 事件

Jquery 的事件方法