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上的样子示例:
不幸的是,在您的情况下,您不能对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来说,它看起来像是在盒子里工作
现在有一个特定于平台的配置选项,可让您在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
| 归档时间: |
|
| 查看次数: |
2995 次 |
| 最近记录: |