问题描述
我正在为Xamairn Forms开发macOS应用程序,现在我需要以编程方式触发选择器以打开选择框。我在iOS / Android上成功完成此操作,但在macOS平台上遇到了问题。
由于我更改了选择器上的某些设计,所以我制作了一个自定义渲染器。
[assembly: Xamarin.Forms.ExportRenderer(typeof(Picker),typeof(CustomPickerRenderer))]
namespace Project.MacOS.Renderers
{
public class CustomPickerRenderer : PickerRenderer
{
Picker element;
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
element = e.NewElement as Picker;
if (Control != null && element != null)
{
Control.Activated += ComboBoxSelectionChanged;
element.Focused += Element_Focused;
Control.Alignment = NSTextAlignment.Left;
Control.Layer.BorderWidth = 0;
Control.Image = null;
if (Control.Cell != null && Control.Cell != null)
Control.Cell.ArrowPosition = NSPopUpArrowPosition.None;
}
}
private void Element_Focused(object sender,FocusEventArgs e)
{
element?.SetValueFromrenderer(VisualElement.IsFocusedPropertyKey,true);
}
void ComboBoxSelectionChanged(object sender,EventArgs e)
{
element?.SetValueFromrenderer(Picker.SelectedindexProperty,(int)Control.IndexOfSelectedItem);
}
protected override void OnElementPropertyChanged(object sender,System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender,e);
var element = (Picker)this.Element;
if (element.ClassId == "55")
{
element?.SetValueFromrenderer(Picker.SelectedindexProperty,(int)Control.IndexOfSelectedItem);
Control.AddItems(element.Items.ToArray());
element.SetValueFromrenderer(Picker.SelectedindexProperty,(int)Control.IndexOfSelectedItem);
element.SetValueFromrenderer(VisualElement.IsFocusedPropertyKey,true);
}
}
明智地工作。但是现在,当我以选择器为重点时,我首先设置了classid,因为否则onpropertychanged似乎不会弹出。然后,我尝试将其连接到您在代码中看到的任何事件。但是选择器的选择框没有打开。
在我后面的代码中,我对此进行测试:
public void Picker_Tapped (object s,EventArgs e)
{
Device.BeginInvokeOnMainThread(() =>
{
publisherPicker.ClassId = "55";
publisherPicker.Focus();
});
}
但是在渲染器中设置的任何事件都没有运气。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)