2017-06-13 22 views
0

私はXamarinフォームページに日付ピッカーを持っています。既定で設定された日付ピッカーの今日の日付です。その日付を削除するオプションがありますので、ユーザーが日付を選択しないときにnull値を送信することができます日付ピッカー日付ピッカー(Xamarinフォーム)で日付を削除する方法

+0

私はあなただけnull'なので 'にその値を設定することによって、それを行うことができると思います –

+1

@GeraldVersluisは、デフォルトの 'DatePicker'では、' DateTime'がヌル値を持つことができないので、これは不可能です。チェックボックスを追加することもできます(たとえば、「日付を有効にする」)。チェックボックスが選択されていない場合、nullで処理します。それが選択されている場合は、あなたの 'DatePicker'に含まれる値で作業してください...またはあなた自身の' DatePicker'を書くことができます:https://forums.xamarin.com/discussion/20028/datepicker-possible-to-bind-to- nullable-date-value –

+0

nullの代わりにDateTime.MinValueを使用します。 –

答えて

2

私たちは、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" 
     }; 
関連する問題