Browse Source

Merge pull request #7514 from MarchingCube/itemscontrol-annotations

Nullable: ItemContainerGenerator cannot be null
pull/7527/head
Steven Kirk 5 years ago
committed by GitHub
parent
commit
85e92451b6
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      src/Avalonia.Controls/ComboBox.cs
  2. 21
      src/Avalonia.Controls/ItemsControl.cs
  3. 6
      src/Avalonia.Controls/MenuBase.cs
  4. 6
      src/Avalonia.Controls/MenuItem.cs
  5. 2
      src/Avalonia.Controls/Presenters/CarouselPresenter.cs
  6. 2
      src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
  7. 2
      src/Avalonia.Controls/TabControl.cs
  8. 2
      src/Avalonia.Controls/TreeView.cs
  9. 2
      src/Avalonia.Controls/TreeViewItem.cs

6
src/Avalonia.Controls/ComboBox.cs

@ -360,12 +360,12 @@ namespace Avalonia.Controls
var selectedIndex = SelectedIndex; var selectedIndex = SelectedIndex;
if (IsDropDownOpen && selectedIndex != -1) if (IsDropDownOpen && selectedIndex != -1)
{ {
var container = ItemContainerGenerator!.ContainerFromIndex(selectedIndex); var container = ItemContainerGenerator.ContainerFromIndex(selectedIndex);
if (container == null && SelectedIndex != -1) if (container == null && SelectedIndex != -1)
{ {
ScrollIntoView(Selection.SelectedIndex); ScrollIntoView(Selection.SelectedIndex);
container = ItemContainerGenerator!.ContainerFromIndex(selectedIndex); container = ItemContainerGenerator.ContainerFromIndex(selectedIndex);
} }
if (container != null && CanFocus(container)) if (container != null && CanFocus(container))
@ -415,7 +415,7 @@ namespace Avalonia.Controls
private void SelectFocusedItem() private void SelectFocusedItem()
{ {
foreach (ItemContainerInfo dropdownItem in ItemContainerGenerator!.Containers) foreach (ItemContainerInfo dropdownItem in ItemContainerGenerator.Containers)
{ {
if (dropdownItem.ContainerControl.IsFocused) if (dropdownItem.ContainerControl.IsFocused)
{ {

21
src/Avalonia.Controls/ItemsControl.cs

@ -79,7 +79,7 @@ namespace Avalonia.Controls
/// <summary> /// <summary>
/// Gets the <see cref="IItemContainerGenerator"/> for the control. /// Gets the <see cref="IItemContainerGenerator"/> for the control.
/// </summary> /// </summary>
public IItemContainerGenerator? ItemContainerGenerator public IItemContainerGenerator ItemContainerGenerator
{ {
get get
{ {
@ -87,13 +87,10 @@ namespace Avalonia.Controls
{ {
_itemContainerGenerator = CreateItemContainerGenerator(); _itemContainerGenerator = CreateItemContainerGenerator();
if (_itemContainerGenerator != null) _itemContainerGenerator.ItemTemplate = ItemTemplate;
{ _itemContainerGenerator.Materialized += (_, e) => OnContainersMaterialized(e);
_itemContainerGenerator.ItemTemplate = ItemTemplate; _itemContainerGenerator.Dematerialized += (_, e) => OnContainersDematerialized(e);
_itemContainerGenerator.Materialized += (_, e) => OnContainersMaterialized(e); _itemContainerGenerator.Recycled += (_, e) => OnContainersRecycled(e);
_itemContainerGenerator.Dematerialized += (_, e) => OnContainersDematerialized(e);
_itemContainerGenerator.Recycled += (_, e) => OnContainersRecycled(e);
}
} }
return _itemContainerGenerator; return _itemContainerGenerator;
@ -240,14 +237,8 @@ namespace Avalonia.Controls
/// Creates the <see cref="ItemContainerGenerator"/> for the control. /// Creates the <see cref="ItemContainerGenerator"/> for the control.
/// </summary> /// </summary>
/// <returns> /// <returns>
/// An <see cref="IItemContainerGenerator"/> or null. /// An <see cref="IItemContainerGenerator"/>.
/// </returns> /// </returns>
/// <remarks>
/// Certain controls such as <see cref="TabControl"/> 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.
/// </remarks>
protected virtual IItemContainerGenerator CreateItemContainerGenerator() protected virtual IItemContainerGenerator CreateItemContainerGenerator()
{ {
return new ItemContainerGenerator(this); return new ItemContainerGenerator(this);

6
src/Avalonia.Controls/MenuBase.cs

@ -81,13 +81,13 @@ namespace Avalonia.Controls
{ {
var index = SelectedIndex; var index = SelectedIndex;
return (index != -1) ? return (index != -1) ?
(IMenuItem?)ItemContainerGenerator!.ContainerFromIndex(index) : (IMenuItem?)ItemContainerGenerator.ContainerFromIndex(index) :
null; null;
} }
set set
{ {
SelectedIndex = value is not null ? SelectedIndex = value is not null ?
ItemContainerGenerator!.IndexFromContainer(value) : -1; ItemContainerGenerator.IndexFromContainer(value) : -1;
} }
} }
@ -96,7 +96,7 @@ namespace Avalonia.Controls
{ {
get get
{ {
return ItemContainerGenerator!.Containers return ItemContainerGenerator.Containers
.Select(x => x.ContainerControl) .Select(x => x.ContainerControl)
.OfType<IMenuItem>(); .OfType<IMenuItem>();
} }

6
src/Avalonia.Controls/MenuItem.cs

@ -308,12 +308,12 @@ namespace Avalonia.Controls
{ {
var index = SelectedIndex; var index = SelectedIndex;
return (index != -1) ? return (index != -1) ?
(IMenuItem?)ItemContainerGenerator!.ContainerFromIndex(index) : (IMenuItem?)ItemContainerGenerator.ContainerFromIndex(index) :
null; null;
} }
set 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 get
{ {
return ItemContainerGenerator!.Containers return ItemContainerGenerator.Containers
.Select(x => x.ContainerControl) .Select(x => x.ContainerControl)
.OfType<IMenuItem>(); .OfType<IMenuItem>();
} }

2
src/Avalonia.Controls/Presenters/CarouselPresenter.cs

@ -170,7 +170,7 @@ namespace Avalonia.Controls.Presenters
{ {
if (fromIndex != toIndex) if (fromIndex != toIndex)
{ {
var generator = ItemContainerGenerator!; var generator = ItemContainerGenerator;
IControl? from = null; IControl? from = null;
IControl? to = null; IControl? to = null;

2
src/Avalonia.Controls/Primitives/SelectingItemsControl.cs

@ -908,7 +908,7 @@ namespace Avalonia.Controls.Primitives
{ {
MarkContainerSelected( MarkContainerSelected(
container, container,
Selection.IsSelected(ItemContainerGenerator!.IndexFromContainer(container))); Selection.IsSelected(ItemContainerGenerator.IndexFromContainer(container)));
} }
} }
} }

2
src/Avalonia.Controls/TabControl.cs

@ -164,7 +164,7 @@ namespace Avalonia.Controls
else else
{ {
var container = SelectedItem as IContentControl ?? var container = SelectedItem as IContentControl ??
ItemContainerGenerator!.ContainerFromIndex(SelectedIndex) as IContentControl; ItemContainerGenerator.ContainerFromIndex(SelectedIndex) as IContentControl;
SelectedContentTemplate = container?.ContentTemplate; SelectedContentTemplate = container?.ContentTemplate;
SelectedContent = container?.Content; SelectedContent = container?.Content;
} }

2
src/Avalonia.Controls/TreeView.cs

@ -79,7 +79,7 @@ namespace Avalonia.Controls
/// Gets the <see cref="ITreeItemContainerGenerator"/> for the tree view. /// Gets the <see cref="ITreeItemContainerGenerator"/> for the tree view.
/// </summary> /// </summary>
public new ITreeItemContainerGenerator ItemContainerGenerator => public new ITreeItemContainerGenerator ItemContainerGenerator =>
(ITreeItemContainerGenerator)base.ItemContainerGenerator!; (ITreeItemContainerGenerator)base.ItemContainerGenerator;
/// <summary> /// <summary>
/// Gets or sets a value indicating whether to automatically scroll to newly selected items. /// Gets or sets a value indicating whether to automatically scroll to newly selected items.

2
src/Avalonia.Controls/TreeViewItem.cs

@ -89,7 +89,7 @@ namespace Avalonia.Controls
/// Gets the <see cref="ITreeItemContainerGenerator"/> for the tree view. /// Gets the <see cref="ITreeItemContainerGenerator"/> for the tree view.
/// </summary> /// </summary>
public new ITreeItemContainerGenerator ItemContainerGenerator => public new ITreeItemContainerGenerator ItemContainerGenerator =>
(ITreeItemContainerGenerator)base.ItemContainerGenerator!; (ITreeItemContainerGenerator)base.ItemContainerGenerator;
/// <inheritdoc/> /// <inheritdoc/>
protected override IItemContainerGenerator CreateItemContainerGenerator() => CreateTreeItemContainerGenerator<TreeViewItem>(); protected override IItemContainerGenerator CreateItemContainerGenerator() => CreateTreeItemContainerGenerator<TreeViewItem>();

Loading…
Cancel
Save