From 5e5389d74c7dec5e020c1cde136b8840e61f3a6b Mon Sep 17 00:00:00 2001 From: Dariusz Komosinski Date: Thu, 3 Feb 2022 10:39:15 +0100 Subject: [PATCH 1/3] ItemContainerGenerator cannot be null --- src/Avalonia.Controls/ItemsControl.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/Avalonia.Controls/ItemsControl.cs b/src/Avalonia.Controls/ItemsControl.cs index 70f771ca00..1fb13f2e98 100644 --- a/src/Avalonia.Controls/ItemsControl.cs +++ b/src/Avalonia.Controls/ItemsControl.cs @@ -79,7 +79,7 @@ namespace Avalonia.Controls /// /// Gets the for the control. /// - public IItemContainerGenerator? ItemContainerGenerator + public IItemContainerGenerator ItemContainerGenerator { get { @@ -87,13 +87,10 @@ namespace Avalonia.Controls { _itemContainerGenerator = CreateItemContainerGenerator(); - if (_itemContainerGenerator != null) - { - _itemContainerGenerator.ItemTemplate = ItemTemplate; - _itemContainerGenerator.Materialized += (_, e) => OnContainersMaterialized(e); - _itemContainerGenerator.Dematerialized += (_, e) => OnContainersDematerialized(e); - _itemContainerGenerator.Recycled += (_, e) => OnContainersRecycled(e); - } + _itemContainerGenerator.ItemTemplate = ItemTemplate; + _itemContainerGenerator.Materialized += (_, e) => OnContainersMaterialized(e); + _itemContainerGenerator.Dematerialized += (_, e) => OnContainersDematerialized(e); + _itemContainerGenerator.Recycled += (_, e) => OnContainersRecycled(e); } return _itemContainerGenerator; From 9dca8b8321c0de9d86cbcba302bc1c669cc30ddf Mon Sep 17 00:00:00 2001 From: Dariusz Komosinski Date: Thu, 3 Feb 2022 10:40:35 +0100 Subject: [PATCH 2/3] Update comment as well. --- src/Avalonia.Controls/ItemsControl.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/Avalonia.Controls/ItemsControl.cs b/src/Avalonia.Controls/ItemsControl.cs index 1fb13f2e98..10e12a1ae0 100644 --- a/src/Avalonia.Controls/ItemsControl.cs +++ b/src/Avalonia.Controls/ItemsControl.cs @@ -237,14 +237,8 @@ namespace Avalonia.Controls /// Creates the for the control. /// /// - /// An or null. + /// An . /// - /// - /// Certain controls such as don't actually create item - /// containers; however they want it to be ItemsControls so that they have an Items - /// property etc. In this case, a derived class can override this method to return null - /// in order to disable the creation of item containers. - /// protected virtual IItemContainerGenerator CreateItemContainerGenerator() { return new ItemContainerGenerator(this); From 27f920a79dae70b446164ca3d7c37f5b662f6628 Mon Sep 17 00:00:00 2001 From: Dariusz Komosinski Date: Thu, 3 Feb 2022 10:43:24 +0100 Subject: [PATCH 3/3] Fixed ItemContainerGenerator usages. --- src/Avalonia.Controls/ComboBox.cs | 6 +++--- src/Avalonia.Controls/MenuBase.cs | 6 +++--- src/Avalonia.Controls/MenuItem.cs | 6 +++--- src/Avalonia.Controls/Presenters/CarouselPresenter.cs | 2 +- src/Avalonia.Controls/Primitives/SelectingItemsControl.cs | 2 +- src/Avalonia.Controls/TabControl.cs | 2 +- src/Avalonia.Controls/TreeView.cs | 2 +- src/Avalonia.Controls/TreeViewItem.cs | 2 +- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Avalonia.Controls/ComboBox.cs b/src/Avalonia.Controls/ComboBox.cs index d38cd3a0fd..e9eca97e13 100644 --- a/src/Avalonia.Controls/ComboBox.cs +++ b/src/Avalonia.Controls/ComboBox.cs @@ -360,12 +360,12 @@ namespace Avalonia.Controls var selectedIndex = SelectedIndex; if (IsDropDownOpen && selectedIndex != -1) { - var container = ItemContainerGenerator!.ContainerFromIndex(selectedIndex); + var container = ItemContainerGenerator.ContainerFromIndex(selectedIndex); if (container == null && SelectedIndex != -1) { ScrollIntoView(Selection.SelectedIndex); - container = ItemContainerGenerator!.ContainerFromIndex(selectedIndex); + container = ItemContainerGenerator.ContainerFromIndex(selectedIndex); } if (container != null && CanFocus(container)) @@ -415,7 +415,7 @@ namespace Avalonia.Controls private void SelectFocusedItem() { - foreach (ItemContainerInfo dropdownItem in ItemContainerGenerator!.Containers) + foreach (ItemContainerInfo dropdownItem in ItemContainerGenerator.Containers) { if (dropdownItem.ContainerControl.IsFocused) { diff --git a/src/Avalonia.Controls/MenuBase.cs b/src/Avalonia.Controls/MenuBase.cs index c36fbcc51f..bdcff5cd09 100644 --- a/src/Avalonia.Controls/MenuBase.cs +++ b/src/Avalonia.Controls/MenuBase.cs @@ -81,13 +81,13 @@ namespace Avalonia.Controls { var index = SelectedIndex; return (index != -1) ? - (IMenuItem?)ItemContainerGenerator!.ContainerFromIndex(index) : + (IMenuItem?)ItemContainerGenerator.ContainerFromIndex(index) : null; } set { SelectedIndex = value is not null ? - ItemContainerGenerator!.IndexFromContainer(value) : -1; + ItemContainerGenerator.IndexFromContainer(value) : -1; } } @@ -96,7 +96,7 @@ namespace Avalonia.Controls { get { - return ItemContainerGenerator!.Containers + return ItemContainerGenerator.Containers .Select(x => x.ContainerControl) .OfType(); } diff --git a/src/Avalonia.Controls/MenuItem.cs b/src/Avalonia.Controls/MenuItem.cs index 9540ab05f9..185b834052 100644 --- a/src/Avalonia.Controls/MenuItem.cs +++ b/src/Avalonia.Controls/MenuItem.cs @@ -308,12 +308,12 @@ namespace Avalonia.Controls { var index = SelectedIndex; return (index != -1) ? - (IMenuItem?)ItemContainerGenerator!.ContainerFromIndex(index) : + (IMenuItem?)ItemContainerGenerator.ContainerFromIndex(index) : null; } set { - SelectedIndex = value is not null ? ItemContainerGenerator!.IndexFromContainer(value) : -1; + SelectedIndex = value is not null ? ItemContainerGenerator.IndexFromContainer(value) : -1; } } @@ -322,7 +322,7 @@ namespace Avalonia.Controls { get { - return ItemContainerGenerator!.Containers + return ItemContainerGenerator.Containers .Select(x => x.ContainerControl) .OfType(); } diff --git a/src/Avalonia.Controls/Presenters/CarouselPresenter.cs b/src/Avalonia.Controls/Presenters/CarouselPresenter.cs index 8883c9e8ce..3d1e7eb5a8 100644 --- a/src/Avalonia.Controls/Presenters/CarouselPresenter.cs +++ b/src/Avalonia.Controls/Presenters/CarouselPresenter.cs @@ -170,7 +170,7 @@ namespace Avalonia.Controls.Presenters { if (fromIndex != toIndex) { - var generator = ItemContainerGenerator!; + var generator = ItemContainerGenerator; IControl? from = null; IControl? to = null; diff --git a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs index 31de6f6398..840a5ac1dc 100644 --- a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs +++ b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs @@ -908,7 +908,7 @@ namespace Avalonia.Controls.Primitives { MarkContainerSelected( container, - Selection.IsSelected(ItemContainerGenerator!.IndexFromContainer(container))); + Selection.IsSelected(ItemContainerGenerator.IndexFromContainer(container))); } } } diff --git a/src/Avalonia.Controls/TabControl.cs b/src/Avalonia.Controls/TabControl.cs index 019bdfb98a..e0ec23b31f 100644 --- a/src/Avalonia.Controls/TabControl.cs +++ b/src/Avalonia.Controls/TabControl.cs @@ -164,7 +164,7 @@ namespace Avalonia.Controls else { var container = SelectedItem as IContentControl ?? - ItemContainerGenerator!.ContainerFromIndex(SelectedIndex) as IContentControl; + ItemContainerGenerator.ContainerFromIndex(SelectedIndex) as IContentControl; SelectedContentTemplate = container?.ContentTemplate; SelectedContent = container?.Content; } diff --git a/src/Avalonia.Controls/TreeView.cs b/src/Avalonia.Controls/TreeView.cs index 9e0a31ad64..9a276e74d2 100644 --- a/src/Avalonia.Controls/TreeView.cs +++ b/src/Avalonia.Controls/TreeView.cs @@ -79,7 +79,7 @@ namespace Avalonia.Controls /// Gets the for the tree view. /// public new ITreeItemContainerGenerator ItemContainerGenerator => - (ITreeItemContainerGenerator)base.ItemContainerGenerator!; + (ITreeItemContainerGenerator)base.ItemContainerGenerator; /// /// Gets or sets a value indicating whether to automatically scroll to newly selected items. diff --git a/src/Avalonia.Controls/TreeViewItem.cs b/src/Avalonia.Controls/TreeViewItem.cs index 79e8a199f9..20c0ed386d 100644 --- a/src/Avalonia.Controls/TreeViewItem.cs +++ b/src/Avalonia.Controls/TreeViewItem.cs @@ -89,7 +89,7 @@ namespace Avalonia.Controls /// Gets the for the tree view. /// public new ITreeItemContainerGenerator ItemContainerGenerator => - (ITreeItemContainerGenerator)base.ItemContainerGenerator!; + (ITreeItemContainerGenerator)base.ItemContainerGenerator; /// protected override IItemContainerGenerator CreateItemContainerGenerator() => CreateTreeItemContainerGenerator();