0
私はXamarinフォームページに日付ピッカーを持っています。既定で設定された日付ピッカーの今日の日付です。その日付を削除するオプションがありますので、ユーザーが日付を選択しないときにnull値を送信することができます日付ピッカー。日付ピッカー(Xamarinフォーム)で日付を削除する方法
私はXamarinフォームページに日付ピッカーを持っています。既定で設定された日付ピッカーの今日の日付です。その日付を削除するオプションがありますので、ユーザーが日付を選択しないときにnull値を送信することができます日付ピッカー。日付ピッカー(Xamarinフォーム)で日付を削除する方法
私たちは、PCLで日付ピッカー
ためCustomRedererを記述する必要があります。
using System;
using Xamarin.Forms;
namespace IncAlert
{
public class CustomDatePicker : DatePicker
{
public CustomDatePicker()
{
TextColor = Color.FromHex("#282828");
}
public static readonly BindableProperty EnterTextProperty = BindableProperty.Create(propertyName: "EnterText", returnType: typeof(string), declaringType: typeof(CustomDatePicker), defaultValue: default(string));
public string EnterText { get; set; }
public static readonly BindableProperty CustomFontFamilyProperty = BindableProperty.Create(propertyName: "CustomFontFamily", returnType: typeof(string), declaringType: typeof(CustomDatePicker), defaultValue: default(string));
public string CustomFontFamily { get; set; }
public static readonly BindableProperty CustomFontSizeProperty = BindableProperty.Create(propertyName: "CustomFontSize", returnType: typeof(float), declaringType: typeof(CustomDatePicker), defaultValue: default(float));
public float CustomFontSize { get; set; }
}
}
Xamarin.Android:
using System;
using Android.App;
using Android.Content.Res;
using Android.Graphics.Drawables;
using Android.Text;
using Android.Util;
using IncAlert;
using IncAlert.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using Graphicss = Android.Graphics;
[assembly: ExportRenderer(typeof(CustomDatePicker),
typeof(CustomDatePickerRender))]
namespace IncAlert.Droid
{
public class CustomDatePickerRender : DatePickerRenderer
{
public CustomDatePickerRender(){}
protected override void OnElementChanged(ElementChangedEventArgs<DatePicker> e)
{
base.OnElementChanged(e);
try
{
CustomDatePicker element = Element as CustomDatePicker;
if (e.NewElement != null)
{
element = Element as CustomDatePicker;
}
else
{
element = e.OldElement as CustomDatePicker;
}
if (Control != null)
{
//var element = Element as CustomDatePicker;
GradientDrawable gd = new GradientDrawable();
//gd.SetCornerRadius(45); // increase or decrease to changes the corner look
gd.SetColor(global::Android.Graphics.Color.Transparent);
//gd.SetStroke(2, global::Android.Graphics.Color.Gray);
this.Control.SetBackgroundDrawable(gd);
this.Control.SetRawInputType(InputTypes.TextFlagNoSuggestions);
if (!string.IsNullOrWhiteSpace(element.EnterText))
{
Control.Text = element.EnterText;
}
Control.SetHintTextColor(ColorStateList.ValueOf
(global::Android.Graphics.Color.Black));//for placeholder
if (element.CustomFontSize != 0.0)
{
Control.SetTextSize(ComplexUnitType.Dip, element.CustomFontSize);
//Control.SetTextSize(Android.Util.ComplexUnitType.Dip, element.CustomFontSize);
}
if (element.CustomFontFamily == "Avenir65")
{
Graphicss.Typeface font = Graphicss.Typeface.CreateFromAsset(Forms.Context.Assets, "AvenirLTStd-Medium.ttf");
Control.Typeface = font;
}
else if (element.CustomFontFamily == "Avenir45")
{
Graphicss.Typeface font = Graphicss.Typeface.CreateFromAsset(Forms.Context.Assets, "AvenirLTStd-Book.ttf");
Control.Typeface = font;
}
else
{
}
}
}
catch (Exception ex)
{
var msg = ex.Message;
}
//this.Control.InputType = InputTypes.TextVariationPassword;
}
protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
try
{
CustomDatePicker element = Element as CustomDatePicker;
if (Control != null)
{
//var element = Element as CustomDatePicker;
GradientDrawable gd = new GradientDrawable();
//gd.SetCornerRadius(45); // increase or decrease to changes the corner look
gd.SetColor(global::Android.Graphics.Color.Transparent);
//gd.SetStroke(2, global::Android.Graphics.Color.Gray);
this.Control.SetBackgroundDrawable(gd);
this.Control.SetRawInputType(InputTypes.TextFlagNoSuggestions);
if (!string.IsNullOrWhiteSpace(element.EnterText))
{
//Control.Text = element.EnterText;
}
Control.SetHintTextColor(ColorStateList.ValueOf(global::Android.Graphics.Color.Black));//for placeholder
if (element.CustomFontSize != 0.0)
{
Control.SetTextSize(ComplexUnitType.Dip, element.CustomFontSize);
//Control.SetTextSize(Android.Util.ComplexUnitType.Dip, element.CustomFontSize);
}
if (element.CustomFontFamily == "Avenir65")
{
Graphicss.Typeface font = Graphicss.Typeface.CreateFromAsset(Forms.Context.Assets, "AvenirLTStd-Medium.ttf");
Control.Typeface = font;
}
else if (element.CustomFontFamily == "Avenir45")
{
Graphicss.Typeface font = Graphicss.Typeface.CreateFromAsset(Forms.Context.Assets, "AvenirLTStd-Book.ttf");
Control.Typeface = font;
}
else
{
}
}
}
catch (Exception ex)
{
var msg = ex.Message;
}
//this.Control.InputType = InputTypes.TextVariationPassword;
}
}
}
Xamarin.iOS:
をXAMLでusing System;
using IncAlert;
using IncAlert.iOS;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(CustomDatePicker),
typeof(CustomDatePickerRender))]
namespace IncAlert.iOS
{
public class CustomDatePickerRender : DatePickerRenderer
{
public CustomDatePickerRender(){}
protected override void OnElementChanged(ElementChangedEventArgs<DatePicker> e)
{
base.OnElementChanged(e);
try
{
CustomDatePicker element = Element as CustomDatePicker;
if (e.NewElement != null)
{
element = Element as CustomDatePicker;
}
else
{
element = e.OldElement as CustomDatePicker;
}
if (Control != null)
{
//var element = Element as CustomDatePicker;
var textGiven = element.EnterText;
Control.BorderStyle = UITextBorderStyle.None;
Control.AdjustsFontSizeToFitWidth = true;
Control.Layer.CornerRadius = 10;
Control.ExclusiveTouch = true;
if (!string.IsNullOrWhiteSpace(textGiven))
{
Control.Text = textGiven;
}
Control.TextColor = UIColor.Black;
if (element.CustomFontFamily == "Avenir65")
{
Control.Font = UIFont.FromName("AvenirLTStd-Medium.ttf", 15f);
}
else if (element.CustomFontFamily == "Avenir45")
{
Control.Font = UIFont.FromName("AvenirLTStd-Book.ttf", 15f);
}
else
{
}
if (element.CustomFontSize != 0)
{
UIFont font = Control.Font.WithSize(element.CustomFontSize);
Control.Font = font;
}
else
{
}
}
}
catch (Exception ex)
{
var msg = ex.Message;
}
}
protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
try
{
CustomDatePicker element = Element as CustomDatePicker;
if (Control != null)
{
//var element = Element as CustomDatePicker;
var textGiven = element.EnterText;
Control.BorderStyle = UITextBorderStyle.None;
Control.AdjustsFontSizeToFitWidth = true;
Control.Layer.CornerRadius = 10;
Control.ExclusiveTouch = true;
if (!string.IsNullOrWhiteSpace(textGiven))
{
//Control.Text = textGiven;
}
Control.TextColor = UIColor.Black;
if (element.CustomFontFamily == "Avenir65")
{
Control.Font = UIFont.FromName("AvenirLTStd-Medium.ttf", 15f);
}
else if (element.CustomFontFamily == "Avenir45")
{
Control.Font = UIFont.FromName("AvenirLTStd-Book.ttf", 15f);
}
else
{
}
if (element.CustomFontSize != 0)
{
UIFont font =
Control.Font.WithSize(element.CustomFontSize);
Control.Font = font;
}
else
{
}
}
}
catch (Exception ex)
{
var msg = ex.Message;
}
}
}
}
:のC#で
<local:CustomDatePicker EnterText=" "/>
(OR)
:
CustomDatePicker regDateEntry = new CustomDatePicker()
{
EnterText = " ",
CustomFontSize =15,
CustomFontFamily = "Avenir45"
};
私はあなただけnull'なので 'にその値を設定することによって、それを行うことができると思います –
@GeraldVersluisは、デフォルトの 'DatePicker'では、' DateTime'がヌル値を持つことができないので、これは不可能です。チェックボックスを追加することもできます(たとえば、「日付を有効にする」)。チェックボックスが選択されていない場合、nullで処理します。それが選択されている場合は、あなたの 'DatePicker'に含まれる値で作業してください...またはあなた自身の' DatePicker'を書くことができます:https://forums.xamarin.com/discussion/20028/datepicker-possible-to-bind-to- nullable-date-value –
nullの代わりにDateTime.MinValueを使用します。 –