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);
}
}
}
}
}