#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, если нет, то как мне этого добиться?