diff --git a/Avalonia.Desktop.slnf b/Avalonia.Desktop.slnf
index 2f034bd083..3acd4bf9f2 100644
--- a/Avalonia.Desktop.slnf
+++ b/Avalonia.Desktop.slnf
@@ -15,6 +15,7 @@
"src\\Avalonia.Build.Tasks\\Avalonia.Build.Tasks.csproj",
"src\\Avalonia.Controls.ColorPicker\\Avalonia.Controls.ColorPicker.csproj",
"src\\Avalonia.Controls.DataGrid\\Avalonia.Controls.DataGrid.csproj",
+ "src\\Avalonia.Controls.ItemsRepeater\\Avalonia.Controls.ItemsRepeater.csproj",
"src\\Avalonia.Controls\\Avalonia.Controls.csproj",
"src\\Avalonia.DesignerSupport\\Avalonia.DesignerSupport.csproj",
"src\\Avalonia.Desktop\\Avalonia.Desktop.csproj",
diff --git a/Avalonia.sln b/Avalonia.sln
index ce9a37a3ce..525e01c891 100644
--- a/Avalonia.sln
+++ b/Avalonia.sln
@@ -233,6 +233,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReactiveUIDemo", "samples\R
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GpuInterop", "samples\GpuInterop\GpuInterop.csproj", "{C810060E-3809-4B74-A125-F11533AF9C1B}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Controls.ItemsRepeater", "src\Avalonia.Controls.ItemsRepeater\Avalonia.Controls.ItemsRepeater.csproj", "{EE0F0DD4-A70D-472B-BD5D-B7D32D0E9386}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Controls.ItemsRepeater.UnitTests", "tests\Avalonia.Controls.ItemsRepeater.UnitTests\Avalonia.Controls.ItemsRepeater.UnitTests.csproj", "{F4E36AA8-814E-4704-BC07-291F70F45193}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -548,6 +552,14 @@ Global
{C810060E-3809-4B74-A125-F11533AF9C1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C810060E-3809-4B74-A125-F11533AF9C1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C810060E-3809-4B74-A125-F11533AF9C1B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EE0F0DD4-A70D-472B-BD5D-B7D32D0E9386}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE0F0DD4-A70D-472B-BD5D-B7D32D0E9386}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EE0F0DD4-A70D-472B-BD5D-B7D32D0E9386}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EE0F0DD4-A70D-472B-BD5D-B7D32D0E9386}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F4E36AA8-814E-4704-BC07-291F70F45193}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F4E36AA8-814E-4704-BC07-291F70F45193}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F4E36AA8-814E-4704-BC07-291F70F45193}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F4E36AA8-814E-4704-BC07-291F70F45193}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -613,6 +625,7 @@ Global
{90B08091-9BBD-4362-B712-E9F2CC62B218} = {9B9E3891-2366-4253-A952-D08BCEB71098}
{75C47156-C5D8-44BC-A5A7-E8657C2248D6} = {9B9E3891-2366-4253-A952-D08BCEB71098}
{C810060E-3809-4B74-A125-F11533AF9C1B} = {9B9E3891-2366-4253-A952-D08BCEB71098}
+ {F4E36AA8-814E-4704-BC07-291F70F45193} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {87366D66-1391-4D90-8999-95A620AD786A}
diff --git a/samples/ControlCatalog/ControlCatalog.csproj b/samples/ControlCatalog/ControlCatalog.csproj
index 18f0dd16ba..c223bfe1a9 100644
--- a/samples/ControlCatalog/ControlCatalog.csproj
+++ b/samples/ControlCatalog/ControlCatalog.csproj
@@ -26,6 +26,7 @@
+
diff --git a/src/Avalonia.Controls.ItemsRepeater/Avalonia.Controls.ItemsRepeater.csproj b/src/Avalonia.Controls.ItemsRepeater/Avalonia.Controls.ItemsRepeater.csproj
new file mode 100644
index 0000000000..1ec0ee33a7
--- /dev/null
+++ b/src/Avalonia.Controls.ItemsRepeater/Avalonia.Controls.ItemsRepeater.csproj
@@ -0,0 +1,20 @@
+
+
+ net6.0;netstandard2.0
+ Avalonia.Controls.ItemsRepeater
+ Avalonia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Controls/Repeater/ElementFactory.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/ElementFactory.cs
similarity index 100%
rename from src/Avalonia.Controls/Repeater/ElementFactory.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/ElementFactory.cs
diff --git a/src/Avalonia.Controls/Repeater/IElementFactory.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/IElementFactory.cs
similarity index 100%
rename from src/Avalonia.Controls/Repeater/IElementFactory.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/IElementFactory.cs
diff --git a/src/Avalonia.Controls/Repeater/ItemTemplateWrapper.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/ItemTemplateWrapper.cs
similarity index 100%
rename from src/Avalonia.Controls/Repeater/ItemTemplateWrapper.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/ItemTemplateWrapper.cs
diff --git a/src/Avalonia.Controls/Repeater/ItemsRepeater.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/ItemsRepeater.cs
similarity index 100%
rename from src/Avalonia.Controls/Repeater/ItemsRepeater.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/ItemsRepeater.cs
diff --git a/src/Avalonia.Controls/Repeater/ItemsRepeaterElementClearingEventArgs.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/ItemsRepeaterElementClearingEventArgs.cs
similarity index 100%
rename from src/Avalonia.Controls/Repeater/ItemsRepeaterElementClearingEventArgs.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/ItemsRepeaterElementClearingEventArgs.cs
diff --git a/src/Avalonia.Controls/Repeater/ItemsRepeaterElementIndexChangedEventArgs.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/ItemsRepeaterElementIndexChangedEventArgs.cs
similarity index 100%
rename from src/Avalonia.Controls/Repeater/ItemsRepeaterElementIndexChangedEventArgs.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/ItemsRepeaterElementIndexChangedEventArgs.cs
diff --git a/src/Avalonia.Controls/Repeater/ItemsRepeaterElementPreparedEventArgs.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/ItemsRepeaterElementPreparedEventArgs.cs
similarity index 100%
rename from src/Avalonia.Controls/Repeater/ItemsRepeaterElementPreparedEventArgs.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/ItemsRepeaterElementPreparedEventArgs.cs
diff --git a/src/Avalonia.Controls/Repeater/RecyclePool.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/RecyclePool.cs
similarity index 100%
rename from src/Avalonia.Controls/Repeater/RecyclePool.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/RecyclePool.cs
diff --git a/src/Avalonia.Controls/Repeater/RecyclingElementFactory.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/RecyclingElementFactory.cs
similarity index 100%
rename from src/Avalonia.Controls/Repeater/RecyclingElementFactory.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/RecyclingElementFactory.cs
diff --git a/src/Avalonia.Controls/Repeater/RepeaterLayoutContext.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/RepeaterLayoutContext.cs
similarity index 100%
rename from src/Avalonia.Controls/Repeater/RepeaterLayoutContext.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/RepeaterLayoutContext.cs
diff --git a/src/Avalonia.Controls/Repeater/UniqueIdElementPool.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/UniqueIdElementPool.cs
similarity index 100%
rename from src/Avalonia.Controls/Repeater/UniqueIdElementPool.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/UniqueIdElementPool.cs
diff --git a/src/Avalonia.Controls/Repeater/ViewManager.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/ViewManager.cs
similarity index 99%
rename from src/Avalonia.Controls/Repeater/ViewManager.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/ViewManager.cs
index 2dff18cd04..2d302a95dd 100644
--- a/src/Avalonia.Controls/Repeater/ViewManager.cs
+++ b/src/Avalonia.Controls.ItemsRepeater/Controls/ViewManager.cs
@@ -256,7 +256,7 @@ namespace Avalonia.Controls
public void UpdatePin(Control element, bool addPin)
{
- var parent = element.VisualParent;
+ var parent = element.GetVisualParent();
var child = (Visual)element;
while (parent != null)
@@ -283,7 +283,7 @@ namespace Avalonia.Controls
}
child = parent;
- parent = child.VisualParent;
+ parent = child.GetVisualParent();
}
}
@@ -656,7 +656,7 @@ namespace Avalonia.Controls
// that handlers can walk up the tree in case they want to find their IndexPath in the
// nested case.
var children = repeater.Children;
- if (element.VisualParent != repeater)
+ if (element.GetVisualParent() != repeater)
{
children.Add(element);
}
@@ -701,7 +701,7 @@ namespace Avalonia.Controls
if (FocusManager.Instance?.Current is Visual child)
{
- var parent = child.VisualParent;
+ var parent = child.GetVisualParent();
var owner = _owner;
// Find out if the focused element belongs to one of our direct
@@ -722,7 +722,7 @@ namespace Avalonia.Controls
}
child = parent;
- parent = child?.VisualParent;
+ parent = child?.GetVisualParent();
}
}
diff --git a/src/Avalonia.Controls/Repeater/ViewportManager.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/ViewportManager.cs
similarity index 98%
rename from src/Avalonia.Controls/Repeater/ViewportManager.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/ViewportManager.cs
index 56e0cda8fe..336fb2d228 100644
--- a/src/Avalonia.Controls/Repeater/ViewportManager.cs
+++ b/src/Avalonia.Controls.ItemsRepeater/Controls/ViewportManager.cs
@@ -67,7 +67,7 @@ namespace Avalonia.Controls
// be a direct child of ours, or even an indirect child. We need to walk up the tree starting
// from anchorElement to figure out what child of ours (if any) to use as the suggested element.
var child = anchorElement;
- var parent = child.VisualParent as Control;
+ var parent = child.GetVisualParent() as Control;
while (parent != null)
{
@@ -78,7 +78,7 @@ namespace Avalonia.Controls
}
child = parent;
- parent = parent.VisualParent as Control;
+ parent = parent.GetVisualParent() as Control;
}
}
}
@@ -369,11 +369,11 @@ namespace Avalonia.Controls
private Control? GetImmediateChildOfRepeater(Control descendant)
{
var targetChild = descendant;
- var parent = (Control?)descendant.VisualParent;
+ var parent = (Control?)descendant.GetVisualParent();
while (parent != null && parent != _owner)
{
targetChild = parent;
- parent = (Control?)parent.VisualParent;
+ parent = (Control?)parent.GetVisualParent();
}
if (parent == null)
@@ -471,7 +471,7 @@ namespace Avalonia.Controls
break;
}
- parent = parent.VisualParent;
+ parent = parent.GetVisualParent();
}
if (!_managingViewportDisabled)
diff --git a/src/Avalonia.Controls/Repeater/VirtualizationInfo.cs b/src/Avalonia.Controls.ItemsRepeater/Controls/VirtualizationInfo.cs
similarity index 100%
rename from src/Avalonia.Controls/Repeater/VirtualizationInfo.cs
rename to src/Avalonia.Controls.ItemsRepeater/Controls/VirtualizationInfo.cs
diff --git a/src/Avalonia.Base/Layout/AttachedLayout.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/AttachedLayout.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/AttachedLayout.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/AttachedLayout.cs
diff --git a/src/Avalonia.Base/Layout/ElementManager.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/ElementManager.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/ElementManager.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/ElementManager.cs
diff --git a/src/Avalonia.Base/Layout/FlowLayoutAlgorithm.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/FlowLayoutAlgorithm.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/FlowLayoutAlgorithm.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/FlowLayoutAlgorithm.cs
diff --git a/src/Avalonia.Base/Layout/IFlowLayoutAlgorithmDelegates.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/IFlowLayoutAlgorithmDelegates.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/IFlowLayoutAlgorithmDelegates.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/IFlowLayoutAlgorithmDelegates.cs
diff --git a/src/Avalonia.Base/Layout/LayoutContext.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/LayoutContext.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/LayoutContext.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/LayoutContext.cs
diff --git a/src/Avalonia.Base/Layout/LayoutContextAdapter.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/LayoutContextAdapter.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/LayoutContextAdapter.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/LayoutContextAdapter.cs
diff --git a/src/Avalonia.Base/Layout/NonVirtualizingLayout.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/NonVirtualizingLayout.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/NonVirtualizingLayout.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/NonVirtualizingLayout.cs
diff --git a/src/Avalonia.Base/Layout/NonVirtualizingLayoutContext.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/NonVirtualizingLayoutContext.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/NonVirtualizingLayoutContext.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/NonVirtualizingLayoutContext.cs
diff --git a/src/Avalonia.Base/Layout/NonVirtualizingStackLayout.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/NonVirtualizingStackLayout.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/NonVirtualizingStackLayout.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/NonVirtualizingStackLayout.cs
diff --git a/src/Avalonia.Base/Layout/OrientationBasedMeasures.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/OrientationBasedMeasures.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/OrientationBasedMeasures.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/OrientationBasedMeasures.cs
diff --git a/src/Avalonia.Base/Layout/StackLayout.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/StackLayout.cs
similarity index 98%
rename from src/Avalonia.Base/Layout/StackLayout.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/StackLayout.cs
index e9093cc146..5e2b2b8574 100644
--- a/src/Avalonia.Base/Layout/StackLayout.cs
+++ b/src/Avalonia.Controls.ItemsRepeater/Layout/StackLayout.cs
@@ -5,6 +5,7 @@
using System;
using System.Collections.Specialized;
+using Avalonia.Controls;
using Avalonia.Data;
using Avalonia.Logging;
@@ -25,13 +26,13 @@ namespace Avalonia.Layout
/// Defines the property.
///
public static readonly StyledProperty OrientationProperty =
- AvaloniaProperty.Register(nameof(Orientation), Orientation.Vertical);
+ StackPanel.OrientationProperty.AddOwner();
///
/// Defines the property.
///
public static readonly StyledProperty SpacingProperty =
- AvaloniaProperty.Register(nameof(Spacing));
+ StackPanel.SpacingProperty.AddOwner();
private readonly OrientationBasedMeasures _orientation = new OrientationBasedMeasures();
diff --git a/src/Avalonia.Base/Layout/StackLayoutState.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/StackLayoutState.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/StackLayoutState.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/StackLayoutState.cs
diff --git a/src/Avalonia.Base/Layout/UniformGridLayout.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/UniformGridLayout.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/UniformGridLayout.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/UniformGridLayout.cs
diff --git a/src/Avalonia.Base/Layout/UniformGridLayoutState.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/UniformGridLayoutState.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/UniformGridLayoutState.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/UniformGridLayoutState.cs
diff --git a/src/Avalonia.Base/Layout/Utils/ListUtils.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/Utils/ListUtils.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/Utils/ListUtils.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/Utils/ListUtils.cs
diff --git a/src/Avalonia.Base/Layout/WrapLayout/UvBounds.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/UvBounds.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/WrapLayout/UvBounds.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/UvBounds.cs
diff --git a/src/Avalonia.Base/Layout/WrapLayout/UvMeasure.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/UvMeasure.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/WrapLayout/UvMeasure.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/UvMeasure.cs
diff --git a/src/Avalonia.Base/Layout/VirtualLayoutContextAdapter.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/VirtualLayoutContextAdapter.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/VirtualLayoutContextAdapter.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/VirtualLayoutContextAdapter.cs
diff --git a/src/Avalonia.Base/Layout/VirtualizingLayout.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/VirtualizingLayout.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/VirtualizingLayout.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/VirtualizingLayout.cs
diff --git a/src/Avalonia.Base/Layout/VirtualizingLayoutContext.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/VirtualizingLayoutContext.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/VirtualizingLayoutContext.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/VirtualizingLayoutContext.cs
diff --git a/src/Avalonia.Base/Layout/WrapLayout/WrapItem.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/WrapItem.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/WrapLayout/WrapItem.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/WrapItem.cs
diff --git a/src/Avalonia.Base/Layout/WrapLayout/WrapLayout.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/WrapLayout.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/WrapLayout/WrapLayout.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/WrapLayout.cs
diff --git a/src/Avalonia.Base/Layout/WrapLayout/WrapLayoutState.cs b/src/Avalonia.Controls.ItemsRepeater/Layout/WrapLayoutState.cs
similarity index 100%
rename from src/Avalonia.Base/Layout/WrapLayout/WrapLayoutState.cs
rename to src/Avalonia.Controls.ItemsRepeater/Layout/WrapLayoutState.cs
diff --git a/src/Avalonia.Controls.ItemsRepeater/Properties/AssemblyInfo.cs b/src/Avalonia.Controls.ItemsRepeater/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..d8023b0853
--- /dev/null
+++ b/src/Avalonia.Controls.ItemsRepeater/Properties/AssemblyInfo.cs
@@ -0,0 +1,4 @@
+using Avalonia.Metadata;
+
+[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Controls")]
+[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Layout")]
diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj
index 42c577041a..3195c38eef 100644
--- a/src/Avalonia.Controls/Avalonia.Controls.csproj
+++ b/src/Avalonia.Controls/Avalonia.Controls.csproj
@@ -12,6 +12,7 @@
+
diff --git a/src/Avalonia.Controls/StackPanel.cs b/src/Avalonia.Controls/StackPanel.cs
index aa63ac975e..9362dab553 100644
--- a/src/Avalonia.Controls/StackPanel.cs
+++ b/src/Avalonia.Controls/StackPanel.cs
@@ -22,13 +22,13 @@ namespace Avalonia.Controls
/// Defines the property.
///
public static readonly StyledProperty SpacingProperty =
- StackLayout.SpacingProperty.AddOwner();
+ AvaloniaProperty.Register(nameof(Spacing));
///
/// Defines the property.
///
public static readonly StyledProperty OrientationProperty =
- StackLayout.OrientationProperty.AddOwner();
+ AvaloniaProperty.Register(nameof(Orientation), Orientation.Vertical);
///
/// Defines the property.
diff --git a/src/Avalonia.Controls/VirtualizingStackPanel.cs b/src/Avalonia.Controls/VirtualizingStackPanel.cs
index c5276741b6..634efbd699 100644
--- a/src/Avalonia.Controls/VirtualizingStackPanel.cs
+++ b/src/Avalonia.Controls/VirtualizingStackPanel.cs
@@ -23,7 +23,7 @@ namespace Avalonia.Controls
/// Defines the property.
///
public static readonly StyledProperty OrientationProperty =
- StackLayout.OrientationProperty.AddOwner();
+ StackPanel.OrientationProperty.AddOwner();
///
/// Defines the property.
diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs
index 574d46e737..f7c3089214 100644
--- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs
+++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs
@@ -79,8 +79,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers
{
var parentType = parentObject.Type.GetClrType();
- if (context.GetAvaloniaTypes().ItemsControl.IsDirectlyAssignableFrom(parentType)
- || context.GetAvaloniaTypes().ItemsRepeater.IsDirectlyAssignableFrom(parentType))
+ if (context.GetAvaloniaTypes().ItemsControl.IsDirectlyAssignableFrom(parentType))
{
inferredDataContextTypeNode = InferDataContextOfPresentedItem(context, on, parentObject);
}
diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs
index 0b61316603..8f487b5552 100644
--- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs
+++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs
@@ -55,7 +55,6 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers
public IXamlType DataTemplate { get; }
public IXamlType IDataTemplate { get; }
public IXamlType ItemsControl { get; }
- public IXamlType ItemsRepeater { get; }
public IXamlType ReflectionBindingExtension { get; }
public IXamlType RelativeSource { get; }
@@ -179,7 +178,6 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers
DataTemplate = cfg.TypeSystem.GetType("Avalonia.Markup.Xaml.Templates.DataTemplate");
IDataTemplate = cfg.TypeSystem.GetType("Avalonia.Controls.Templates.IDataTemplate");
ItemsControl = cfg.TypeSystem.GetType("Avalonia.Controls.ItemsControl");
- ItemsRepeater = cfg.TypeSystem.GetType("Avalonia.Controls.ItemsRepeater");
ReflectionBindingExtension = cfg.TypeSystem.GetType("Avalonia.Markup.Xaml.MarkupExtensions.ReflectionBindingExtension");
RelativeSource = cfg.TypeSystem.GetType("Avalonia.Data.RelativeSource");
UInt = cfg.TypeSystem.GetType("System.UInt32");
diff --git a/tests/Avalonia.Controls.ItemsRepeater.UnitTests/Avalonia.Controls.ItemsRepeater.UnitTests.csproj b/tests/Avalonia.Controls.ItemsRepeater.UnitTests/Avalonia.Controls.ItemsRepeater.UnitTests.csproj
new file mode 100644
index 0000000000..6f9815757e
--- /dev/null
+++ b/tests/Avalonia.Controls.ItemsRepeater.UnitTests/Avalonia.Controls.ItemsRepeater.UnitTests.csproj
@@ -0,0 +1,22 @@
+
+
+ net6.0
+ Library
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/Avalonia.Controls.UnitTests/ItemsRepeaterTests.cs b/tests/Avalonia.Controls.ItemsRepeater.UnitTests/ItemsRepeaterTests.cs
similarity index 100%
rename from tests/Avalonia.Controls.UnitTests/ItemsRepeaterTests.cs
rename to tests/Avalonia.Controls.ItemsRepeater.UnitTests/ItemsRepeaterTests.cs
diff --git a/tests/Avalonia.Base.UnitTests/Layout/NonVirtualizingStackLayoutTests.cs b/tests/Avalonia.Controls.ItemsRepeater.UnitTests/NonVirtualizingStackLayoutTests.cs
similarity index 100%
rename from tests/Avalonia.Base.UnitTests/Layout/NonVirtualizingStackLayoutTests.cs
rename to tests/Avalonia.Controls.ItemsRepeater.UnitTests/NonVirtualizingStackLayoutTests.cs
diff --git a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj
index 4572f7ae7c..15815c81b6 100644
--- a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj
+++ b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj
@@ -11,6 +11,7 @@
+
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj
index fa4957c24c..ade6010bae 100644
--- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj
@@ -17,6 +17,7 @@
+