Пользовательский элемент управления, для которого не задана ширина содержимого

#c# #xamarin.forms

Вопрос:

Я пытаюсь создать сегментированный элемент управления календарем, но когда я просматриваю элемент управления во время выполнения, его ширина обрезается.

Я объявляю свои элементы управления таким образом, поэтому я думаю, что причина в том, что xaml не задает ширину или что-то в этом роде?

 public class DateTimePicker2 : ContentView, INotifyPropertyChanged {   public Entry _entry { get; private set; } = new Entry();   public Entry _dayEntry { get; private set; } = new Entry();   public Entry _monthEntry { get; private set; } = new Entry();   public Entry _yearEntry { get; private set; } = new Entry();   public Entry _hourEntry { get; private set; } = new Entry();   public Entry _minsEntry { get; private set; } = new Entry();    private static DateTime? _defaultDateTime = DateTime.Now;    public DatePicker _datePicker { get; private set; } = new DatePicker() { MinimumDate = DateTime.Today, IsVisible = false };  public TimePicker _timePicker { get; private set; } = new TimePicker() { IsVisible = false };   public DatePicker _datePicker { get; private set; } = new DatePicker() {   MinimumDate = DateTime.Today, IsVisible = false };  public TimePicker _timePicker { get; private set; } = new TimePicker()   { IsVisible = false };   public DateTimePicker2()  {  BindingContext = this;   Content = new StackLayout()  {  Orientation = StackOrientation.Horizontal,  Children =  {  _datePicker,  _timePicker,  _entry  }  };   _datePicker.SetBindinglt;DateTimePicker2gt;(DatePicker.DateProperty, p =gt; p._date);  _timePicker.SetBindinglt;DateTimePicker2gt;(TimePicker.TimeProperty, p =gt; p._time);      _timePicker.Unfocused  = (sender, args) =gt; _time = _timePicker.Time;  _datePicker.Focused  = (s, a) =gt; UpdateEntryText();   GestureRecognizers.Add(new TapGestureRecognizer()  {  Command = new Command(() =gt; _datePicker.Focus())  });  _entry.Focused  = (sender, args) =gt;  {  Device.BeginInvokeOnMainThread(() =gt; _datePicker.Focus());  };  _datePicker.Unfocused  = (sender, args) =gt;  {  Device.BeginInvokeOnMainThread(() =gt;  {  _timePicker.Focus();  _date = _datePicker.Date;  UpdateEntryText();  });  };  }   private void UpdateEntryText()  {  _entry.Placeholder=_placeholderText;    _entry.Text = DateTime.ToString(StringFormat);  }   static void DTPropertyChanged(BindableObject bindable, object oldValue, object newValue)  {  var timePicker = (bindable as DateTimePicker2);  timePicker.UpdateEntryText();  }  } }   

По какой-то причине, как вы можете видеть здесь, на изображении, мой текст записи показывает только часть содержимого

Это должно, по крайней мере, показывать ширину содержимого, что здесь происходит?

введите описание изображения здесь

Я потребляю его следующим образом

 lt;local:DateTimePicker2 x:Name="txtDateStartEntry"  PlaceholderText="Please enter Session date / time"  isMonthPickerVisible="True"  isDayPickerVisible="True"  WidthRequest="300"gt;  

Ответ №1:

Я нашел причину, по которой мне нужно создавать свои записи таким образом.

 public Entry _entry { get; private set; } = new Entry() {  WidthRequest=300};  

Вы заметите, что я добавил запрос на ширину, но не должен ли я забрать его из существующего xaml, если нет, то как мне этого добиться?