选择器的完成按钮的Event_Handler

Cin*_*ing 6 c# event-handling picker xamarin

我有一个带有项目列表的xamarin选择器,我想在iPhone上按下"完成"按钮并在android上按下"Oke"按钮时删除选择器.
我有删除选择器的代码.但我不知道可能由哪个event_Handler.

码:

Picker picker = new Picker
    {
        Title = "What's in the slot?",
        VerticalOptions = LayoutOptions.CenterAndExpand
        //HorizontalOptions = LayoutOptions.Center 

    };

private void Displaypickerview(int row, int column)
    {
        if (status == "filling board")
        {
            foreach (string text in pickerText)
            {


picker.Items.Add(text);
        }
        foreach (string ore in oreLevels)
        {
            picker.Items.Add(ore);
        }


        picker.SelectedIndexChanged += (sender, args) =>
        {
            if (picker.SelectedIndex == -1)
            {

            }
            else
            {
                //change value of cell and button
                Picker picker = (Picker)sender;
                int index = picker.SelectedIndex;

                if (index < pickerText.Length)
                {
                    board[row, column].Text = pickerText[index - 1];
                }
                else {
                    board[row, column].Text = oreLevels[index - 1 - pickerText.Length];
                }
            }
        };
    }
    else if (status == "choosing item")
    {

    }

}
Run Code Online (Sandbox Code Playgroud)

它在iPhone上的样子示例:

选择器

vik*_*ria 6

不幸的是,在您的情况下,您不能对Android和iOS使用相同的事件,因为:

当前Picker控件在按下OK按钮后在Android上发送SelectedIndexChanged事件.但是,在iOS上,只要用户滚动选择器并让它停在某个项目上,就会发送该事件

这是已知问题,我从这里引用.

您应该结合SelectedIndexChanged和Unfocus事件来实现您的目标.您可以在此主题中找到一些解决方案 https://forums.xamarin.com/discussion/20847/picker-selection-event

UPD: 看起来我不明白你的问题.如果我现在就这样做了,那么你必须使用自定义渲染器并在其中指定所需的逻辑.

对于iOS.创建继承PickerRenderer的自定义渲染器并实现类似的东西:

protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
    {
        base.OnElementChanged(e);

        var extendedPicker = e.NewElement as ExtendedPicker;
        if (extendedPicker == null) return;

        var toolbar = new UIToolbar(new CGRect(0.0f, 0.0f, Control.Frame.Size.Width, 44.0f));

        toolbar.Items = new[]
        {
            new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace),
            new UIBarButtonItem("Done",
                UIBarButtonItemStyle.Done,
                delegate {
                    Control.ResignFirstResponder();
                })
        };

        if (this.Control != null)
        {
            Control.InputAccessoryView = toolbar;
        }
    }
Run Code Online (Sandbox Code Playgroud)

对于Andorid来说,它看起来像是在盒子里工作


And*_*tro 5

现在有一个特定于平台的配置选项,可让您在iOS上启用此功能。

您可以PickerMode在特定选择器上指定一个,以仅在有人在iOS上点击完成后进行选择。

<ContentPage ...
             xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core">
    <StackLayout Margin="20">
        <Picker ... Title="Select a monkey" ios:Picker.UpdateMode="WhenFinished">
          ...
        </Picker>
        ...
    </StackLayout>
</ContentPage>
Run Code Online (Sandbox Code Playgroud)

Picker.On<iOS>方法指定此特定平台仅在iOS上运行。Xamarin.Forms.PlatformConfiguration.iOSSpecific名称空间中的Picker.SetUpdateMode方法用于控制项目选择的时间,UpdateMode枚举提供两个可能的值:

Immediately–当用户浏览选择器中的项目时,将进行项目选择。这是Xamarin.Forms中的默认行为。

WhenFinished –仅当用户按下选择器中的“完成”按钮时,才进行项目选择。

阅读文档以获取有关控件的更多信息。https://docs.microsoft.com/sr-latn-rs/xamarin/xamarin-forms/platform/ios/picker-selection