Browse Source

small adjustment to avoid IndexOutOfRangeException

pull/4295/head
FoggyFinder 6 years ago
parent
commit
62fd036d55
  1. 16
      src/Avalonia.Controls/DateTimePickers/DatePicker.cs
  2. 16
      src/Avalonia.Controls/DateTimePickers/DatePickerPresenter.cs

16
src/Avalonia.Controls/DateTimePickers/DatePicker.cs

@ -88,7 +88,7 @@ namespace Avalonia.Controls
AvaloniaProperty.RegisterDirect<DatePicker, DateTimeOffset?>(nameof(SelectedDate), AvaloniaProperty.RegisterDirect<DatePicker, DateTimeOffset?>(nameof(SelectedDate),
x => x.SelectedDate, (x, v) => x.SelectedDate = v); x => x.SelectedDate, (x, v) => x.SelectedDate = v);
//Template Items // Template Items
private Button _flyoutButton; private Button _flyoutButton;
private TextBlock _dayText; private TextBlock _dayText;
private TextBlock _monthText; private TextBlock _monthText;
@ -359,10 +359,14 @@ namespace Avalonia.Controls
} }
} }
Grid.SetColumn(_spacer1, 1); var isSpacer1Visible = columnIndex > 1;
Grid.SetColumn(_spacer2, 3); var isSpacer2Visible = columnIndex > 2;
_spacer1.IsVisible = columnIndex > 1; // ternary conditional operator is used to make sure grid cells will be validated
_spacer2.IsVisible = columnIndex > 2; Grid.SetColumn(_spacer1, isSpacer1Visible ? 1 : 0);
Grid.SetColumn(_spacer2, isSpacer2Visible ? 3 : 0);
_spacer1.IsVisible = isSpacer1Visible;
_spacer2.IsVisible = isSpacer2Visible;
} }
private void SetSelectedDateText() private void SetSelectedDateText()
@ -398,7 +402,7 @@ namespace Avalonia.Controls
var deltaY = _presenter.GetOffsetForPopup(); var deltaY = _presenter.GetOffsetForPopup();
//The extra 5 px I think is related to default popup placement behavior // The extra 5 px I think is related to default popup placement behavior
_popup.Host.ConfigurePosition(_popup.PlacementTarget, PlacementMode.AnchorAndGravity, new Point(0, deltaY + 5), _popup.Host.ConfigurePosition(_popup.PlacementTarget, PlacementMode.AnchorAndGravity, new Point(0, deltaY + 5),
Primitives.PopupPositioning.PopupAnchor.Bottom, Primitives.PopupPositioning.PopupGravity.Bottom, Primitives.PopupPositioning.PopupAnchor.Bottom, Primitives.PopupPositioning.PopupGravity.Bottom,
Primitives.PopupPositioning.PopupPositionerConstraintAdjustment.SlideY); Primitives.PopupPositioning.PopupPositionerConstraintAdjustment.SlideY);

16
src/Avalonia.Controls/DateTimePickers/DatePickerPresenter.cs

@ -77,7 +77,7 @@ namespace Avalonia.Controls
DatePicker.YearVisibleProperty.AddOwner<DatePickerPresenter>(x => DatePicker.YearVisibleProperty.AddOwner<DatePickerPresenter>(x =>
x.YearVisible, (x, v) => x.YearVisible = v); x.YearVisible, (x, v) => x.YearVisible = v);
//Template Items // Template Items
private Grid _pickerContainer; private Grid _pickerContainer;
private Button _acceptButton; private Button _acceptButton;
private Button _dismissButton; private Button _dismissButton;
@ -107,7 +107,7 @@ namespace Avalonia.Controls
private bool _yearVisible = true; private bool _yearVisible = true;
private DateTimeOffset _syncDate; private DateTimeOffset _syncDate;
private GregorianCalendar _calendar; private readonly GregorianCalendar _calendar;
private bool _suppressUpdateSelection; private bool _suppressUpdateSelection;
public DatePickerPresenter() public DatePickerPresenter()
@ -234,7 +234,7 @@ namespace Avalonia.Controls
protected override void OnApplyTemplate(TemplateAppliedEventArgs e) protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
{ {
base.OnApplyTemplate(e); base.OnApplyTemplate(e);
//These are requirements, so throw if not found // These are requirements, so throw if not found
_pickerContainer = e.NameScope.Get<Grid>("PickerContainer"); _pickerContainer = e.NameScope.Get<Grid>("PickerContainer");
_monthHost = e.NameScope.Get<Panel>("MonthHost"); _monthHost = e.NameScope.Get<Panel>("MonthHost");
_dayHost = e.NameScope.Get<Panel>("DayHost"); _dayHost = e.NameScope.Get<Panel>("DayHost");
@ -326,7 +326,7 @@ namespace Avalonia.Controls
/// </summary> /// </summary>
private void InitPicker() private void InitPicker()
{ {
//OnApplyTemplate must've been called before we can init here... // OnApplyTemplate must've been called before we can init here...
if (_pickerContainer == null) if (_pickerContainer == null)
return; return;
@ -344,7 +344,7 @@ namespace Avalonia.Controls
SetGrid(); SetGrid();
//Date should've been set when we reach this point // Date should've been set when we reach this point
var dt = Date; var dt = Date;
if (DayVisible) if (DayVisible)
{ {
@ -433,12 +433,12 @@ namespace Avalonia.Controls
} }
} }
private void OnDismissButtonClicked(object sender, Avalonia.Interactivity.RoutedEventArgs e) private void OnDismissButtonClicked(object sender, RoutedEventArgs e)
{ {
OnDismiss(); OnDismiss();
} }
private void OnAcceptButtonClicked(object sender, Avalonia.Interactivity.RoutedEventArgs e) private void OnAcceptButtonClicked(object sender, RoutedEventArgs e)
{ {
Date = _syncDate; Date = _syncDate;
OnConfirmed(); OnConfirmed();
@ -471,7 +471,7 @@ namespace Avalonia.Controls
_syncDate = newDate; _syncDate = newDate;
//We don't need to update the days if not displaying day, not february // We don't need to update the days if not displaying day, not february
if (!DayVisible || _syncDate.Month != 2) if (!DayVisible || _syncDate.Month != 2)
return; return;

Loading…
Cancel
Save