Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin表单PCL-日期选择器不';无法在UWP上正确打开_C#_Xamarin - Fatal编程技术网

C# Xamarin表单PCL-日期选择器不';无法在UWP上正确打开

C# Xamarin表单PCL-日期选择器不';无法在UWP上正确打开,c#,xamarin,C#,Xamarin,我没有得到什么,我想,从一个按钮打开我的日期选择器。所以我编了代码: private void OnDateClicked(object sender, EventArgs ea) { Debug.WriteLine("PLOPPP"); //DatePickerControl.IsVisible = true; //DatePickerControl.Focus(); Device.BeginInvokeOnMainThread(() => {

我没有得到什么,我想,从一个按钮打开我的
日期选择器
。所以我编了代码:

private void OnDateClicked(object sender, EventArgs ea)
{
    Debug.WriteLine("PLOPPP");
    //DatePickerControl.IsVisible = true;
    //DatePickerControl.Focus();
    Device.BeginInvokeOnMainThread(() => {
        DatePickerControl.Focus();
    });
}
一旦用户点击/触摸按钮,什么也不会发生。。为什么?我只是想打开日期选择器,但我不明白为什么它不工作。也许将来会修好的。我可以建议我使用UWP渲染器的解决方法:

[assembly: ExportRenderer(typeof(DatePickerRenderer), typeof(SomeDatePickerRenderer))]
namespace SuperForms.UWP.Renderers
{
    public class SomeDatePickerRenderer : DatePickerRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.DatePicker> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                // TODO: Focus() doesn't open date picker popup on UWP, it's known issue 
                // on Xamarin.Forms and should be fixed in 2.5. Had to open it manually.
                var flyout = new DatePickerFlyout() { Placement = FlyoutPlacementMode.Top };
                flyout.DatePicked += (s, args) =>
                {
                    Control.Date = args.NewDate;
                };

                FlyoutBase.SetAttachedFlyout(Control, flyout);
            }
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            if (e.PropertyName == VisualElement.IsFocusedProperty.PropertyName)
            {
                if (Element.IsFocused)
                {
                    FlyoutBase.ShowAttachedFlyout(Control);
                }
            }
        }
    }
}
[程序集:ExportRenderer(typeof(DatePickerRenderer)、typeof(SomeDatePickerRenderer))]
命名空间SuperForms.UWP.renders
{
公共类SomeDatePickerRenderer:DatePickerRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
//TODO:Focus()未在UWP上打开日期选择器弹出窗口,这是已知问题
//在Xamarin.Forms上,应该在2.5中修复。必须手动打开它。
var flyout=new datepickerlyout(){Placement=flyonplacementmode.Top};
弹出按钮.DatePicked+=(s,args)=>
{
Control.Date=args.NewDate;
};
弹出型按钮Base.SetAttachedFlyout(控件,弹出型按钮);
}
}
受保护的覆盖无效OnElementPropertyChanged(对象发送方,PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(发送方,e);
if(e.PropertyName==VisualElement.IsFocusedProperty.PropertyName)
{
if(Element.IsFocused)
{
弹出式按钮。显示附件DfLyout(控制);
}
}
}
}
}

现在每当
IsFocus
更改为
true
时,它都会显示出来,因此您需要根据自己的要求进行设置。

信息不足。你能提供一个MCVE(最小、完整、可验证的例子吗?谢谢,现在好了吗?
    <!-- code above -->
    <control:CustomDatePicker x:Name="DatePickerControl" Format="dd-MM-yyyy" Date="{Binding CurrentDate}" IsVisible="False"
                              MinimumDate="{Binding CurrentDate}"
                              FontFamily="{extension:FontFamily Roboto_Light}" FontSize="20" TextColor="White"
                              XAlign="Center" HasBorder="false" BackgroundColor="Transparent"
                              AbsoluteLayout.LayoutBounds="0.5, 0.5, 1, 1"
                              AbsoluteLayout.LayoutFlags="All"/>
[assembly: ExportRenderer(typeof(DatePickerRenderer), typeof(SomeDatePickerRenderer))]
namespace SuperForms.UWP.Renderers
{
    public class SomeDatePickerRenderer : DatePickerRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.DatePicker> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                // TODO: Focus() doesn't open date picker popup on UWP, it's known issue 
                // on Xamarin.Forms and should be fixed in 2.5. Had to open it manually.
                var flyout = new DatePickerFlyout() { Placement = FlyoutPlacementMode.Top };
                flyout.DatePicked += (s, args) =>
                {
                    Control.Date = args.NewDate;
                };

                FlyoutBase.SetAttachedFlyout(Control, flyout);
            }
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            if (e.PropertyName == VisualElement.IsFocusedProperty.PropertyName)
            {
                if (Element.IsFocused)
                {
                    FlyoutBase.ShowAttachedFlyout(Control);
                }
            }
        }
    }
}