我们如何处理 Xamarin Forms Picker 的完成按钮单击事件?
How can we handle the done button click event for a Xamarin Forms Picker?
我想在 Xamarin Forms 中的选择器上的完成按钮上触发点击事件。我发现有些人对条目进行了自定义渲染,但我们如何在 Xamarin 表单 iOS 的选择器中实现完成按钮?
您可以使用自定义渲染器来实现此目的。查看 iOS 上 Picker 的 source code,您可以看到 'Done' 按钮已添加到 UIToolbar。您可以获得对按钮的引用,然后处理它的 'Clicked' 事件:
public class MyPickerRenderer : PickerRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
if(e.OldElement != null)
{
var toolbar = (UIToolbar)Control.InputAccessoryView;
var doneBtn = toolbar.Items[1];
doneBtn.Clicked -= DoneBtn_Clicked;
}
if(e.NewElement != null)
{
var toolbar = (UIToolbar)Control.InputAccessoryView;
var doneBtn = toolbar.Items[1];
doneBtn.Clicked += DoneBtn_Clicked;
}
}
void DoneBtn_Clicked(object sender, EventArgs e)
{
Console.WriteLine("Clicked!!!!");
}
}
我在没有自定义渲染的情况下做出的解决方法是,首先您需要使用以下代码更改所选项目在 iOS 上的行为:
<ContentPage xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core">
<StackLayout Margin="20">
<Picker x:Name="picker"
Title="Select a monkey"
ios:Picker.UpdateMode="WhenFinished"
TitleColor="Red">
<Picker.ItemsSource>
<x:Array Type="{x:Type x:String}">
<x:String>Baboon</x:String>
<x:String>Capuchin Monkey</x:String>
<x:String>Blue Monkey</x:String>
<x:String>Squirrel Monkey</x:String>
<x:String>Golden Lion Tamarin</x:String>
<x:String>Howler Monkey</x:String>
<x:String>Japanese Macaque</x:String>
</x:Array>
</Picker.ItemsSource>
</Picker>
</StackLayout>
</ContentPage>
然后尝试收听 Unfocused 和 SelectedIndexChanged 事件处理程序
void picker_Unfocused(System.Object sender, Xamarin.Forms.FocusEventArgs e)
{
//I want to reset the selected index every time the picker is closed.
picker.SelectedIndex = -1;
}
void picker_SelectedIndexChanged(System.Object sender, System.EventArgs e)
{
//Just in case the unfocused is fired first i make a validation to call an action
if (picker.SelectedIndex >= 0){
App.Current.MainPage.DisplayAlert("Selected monkey: ", picker.SelectedItem.ToString(), "Aceptar");
}
}
并且您将能够看到 Android 上的警报将在点击条目中的对象时显示,而 iOS 上的警报将在选择项目时显示 AND 当用户点击 Done 按钮时
我想在 Xamarin Forms 中的选择器上的完成按钮上触发点击事件。我发现有些人对条目进行了自定义渲染,但我们如何在 Xamarin 表单 iOS 的选择器中实现完成按钮?
您可以使用自定义渲染器来实现此目的。查看 iOS 上 Picker 的 source code,您可以看到 'Done' 按钮已添加到 UIToolbar。您可以获得对按钮的引用,然后处理它的 'Clicked' 事件:
public class MyPickerRenderer : PickerRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
if(e.OldElement != null)
{
var toolbar = (UIToolbar)Control.InputAccessoryView;
var doneBtn = toolbar.Items[1];
doneBtn.Clicked -= DoneBtn_Clicked;
}
if(e.NewElement != null)
{
var toolbar = (UIToolbar)Control.InputAccessoryView;
var doneBtn = toolbar.Items[1];
doneBtn.Clicked += DoneBtn_Clicked;
}
}
void DoneBtn_Clicked(object sender, EventArgs e)
{
Console.WriteLine("Clicked!!!!");
}
}
我在没有自定义渲染的情况下做出的解决方法是,首先您需要使用以下代码更改所选项目在 iOS 上的行为:
<ContentPage xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core">
<StackLayout Margin="20">
<Picker x:Name="picker"
Title="Select a monkey"
ios:Picker.UpdateMode="WhenFinished"
TitleColor="Red">
<Picker.ItemsSource>
<x:Array Type="{x:Type x:String}">
<x:String>Baboon</x:String>
<x:String>Capuchin Monkey</x:String>
<x:String>Blue Monkey</x:String>
<x:String>Squirrel Monkey</x:String>
<x:String>Golden Lion Tamarin</x:String>
<x:String>Howler Monkey</x:String>
<x:String>Japanese Macaque</x:String>
</x:Array>
</Picker.ItemsSource>
</Picker>
</StackLayout>
</ContentPage>
然后尝试收听 Unfocused 和 SelectedIndexChanged 事件处理程序
void picker_Unfocused(System.Object sender, Xamarin.Forms.FocusEventArgs e)
{
//I want to reset the selected index every time the picker is closed.
picker.SelectedIndex = -1;
}
void picker_SelectedIndexChanged(System.Object sender, System.EventArgs e)
{
//Just in case the unfocused is fired first i make a validation to call an action
if (picker.SelectedIndex >= 0){
App.Current.MainPage.DisplayAlert("Selected monkey: ", picker.SelectedItem.ToString(), "Aceptar");
}
}
并且您将能够看到 Android 上的警报将在点击条目中的对象时显示,而 iOS 上的警报将在选择项目时显示 AND 当用户点击 Done 按钮时