微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

触发选择器以编程方式在Xamarin Forms macOS中打开选择框

如何解决触发选择器以编程方式在Xamarin Forms macOS中打开选择框

我正在为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 举报,一经查实,本站将立刻删除。