Xamarin.Forms条目的触发功能聚焦/不聚焦

时间:2017-11-14 02:59:58

标签: xamarin.ios xamarin.forms

原始问题:我想在每次在我的Xamarin.Forms ContentPage上显示/隐藏软键盘时调用一个函数。

一种选择是使用自定义渲染器,我可以访问键盘观察者。我还没试过呢;我以为我会先尝试用其他方法敲打我的脑袋。

方法1)将事件处理程序分配给我页面上所有条目的聚焦/未聚焦事件,触发键盘显示/隐藏,在页面的代码隐藏中如下所示:

EventHandler<FocusEventArgs> keyboard_handler = (object sender, FocusEventArgs e) => 
{
    var binding_context = BindingContext as MyViewModel;
    binding_context?.OnKeyboardShowing();
};
PasswordEntry.Focused += keyboard_handler; // doesn't trigger keyboard_handler
PasswordEntry.Unfocused += keyboard_handler; // doesn't trigger
UsernameEntry.Focused += keyboard_handler; // triggers
UsernameEntry.Unfocused += keyboard_handler; //doesn't trigger

问题1 :为什么有些触发器没有?

方法2)使用EventTriggers和自定义TriggerAction<Entry>类,如下所示:

XAML文件的一部分显示其中一个条目(如果必须知道的话,它位于网格中,位于网格中ScrollView的StackLayout中):

<Entry Grid.Row="0"
       x:Name="UsernameEntry"
       Margin="0,2"
       HorizontalOptions="FillAndExpand"
       Placeholder="User"
       IsVisible="{Binding UsernameEnabled}"
       Completed="Username_Completed"
       IsEnabled="{Binding EnableControls}"
       Text="{Binding Username, Mode=TwoWay}" >
    <Entry.Triggers>
        <EventTrigger Event="Focused">
            <local:FocusedAction />
        </EventTrigger>
    </Entry.Triggers>
</Entry>

代码隐藏中定义的TriggerAction<Entry>类:

public class FocusedAction : TriggerAction<Entry>
{
    protected override void Invoke(Entry entry)
    {
        Debug.WriteLine("Reached"); // Except it never reaches here.
    }
}

问题2:为什么Invoke没有被触发?

我在XAML,代码隐藏或其他地方遗漏了什么?我已经检查了Xamarin文档,但是一如既往,我发现它们没有用处。

0 个答案:

没有答案