diff --git a/api/Avalonia.Themes.Fluent.nupkg.xml b/api/Avalonia.Themes.Fluent.nupkg.xml
index f35bf5a629..a5be5ceeb9 100644
--- a/api/Avalonia.Themes.Fluent.nupkg.xml
+++ b/api/Avalonia.Themes.Fluent.nupkg.xml
@@ -403,6 +403,12 @@
baseline/netstandard2.0/Avalonia.Themes.Fluent.dll
target/netstandard2.0/Avalonia.Themes.Fluent.dll
+
+ CP0001
+ T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/UserControl.xaml
+ baseline/netstandard2.0/Avalonia.Themes.Fluent.dll
+ target/netstandard2.0/Avalonia.Themes.Fluent.dll
+
CP0001
T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Window.xaml
diff --git a/api/Avalonia.Themes.Simple.nupkg.xml b/api/Avalonia.Themes.Simple.nupkg.xml
index 78d8c4b332..e6a62495d9 100644
--- a/api/Avalonia.Themes.Simple.nupkg.xml
+++ b/api/Avalonia.Themes.Simple.nupkg.xml
@@ -391,6 +391,12 @@
baseline/netstandard2.0/Avalonia.Themes.Simple.dll
target/netstandard2.0/Avalonia.Themes.Simple.dll
+
+ CP0001
+ T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/UserControl.xaml
+ baseline/netstandard2.0/Avalonia.Themes.Simple.dll
+ target/netstandard2.0/Avalonia.Themes.Simple.dll
+
CP0001
T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Window.xaml
diff --git a/src/Avalonia.Controls/ContentControl.cs b/src/Avalonia.Controls/ContentControl.cs
index 554744e884..4d32658e0d 100644
--- a/src/Avalonia.Controls/ContentControl.cs
+++ b/src/Avalonia.Controls/ContentControl.cs
@@ -4,6 +4,7 @@ using Avalonia.Controls.Mixins;
using Avalonia.Controls.Presenters;
using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates;
+using Avalonia.Data;
using Avalonia.Layout;
using Avalonia.LogicalTree;
using Avalonia.Metadata;
@@ -40,6 +41,23 @@ namespace Avalonia.Controls
public static readonly StyledProperty VerticalContentAlignmentProperty =
AvaloniaProperty.Register(nameof(VerticalContentAlignment));
+ static ContentControl()
+ {
+ TemplateProperty.OverrideDefaultValue(new FuncControlTemplate((_, ns) => new ContentPresenter
+ {
+ Name = "PART_ContentPresenter",
+ [~BackgroundProperty] = new TemplateBinding(BackgroundProperty),
+ [~BorderBrushProperty] = new TemplateBinding(BorderBrushProperty),
+ [~BorderThicknessProperty] = new TemplateBinding(BorderThicknessProperty),
+ [~CornerRadiusProperty] = new TemplateBinding(CornerRadiusProperty),
+ [~ContentTemplateProperty] = new TemplateBinding(ContentTemplateProperty),
+ [~ContentProperty] = new TemplateBinding(ContentProperty),
+ [~PaddingProperty] = new TemplateBinding(PaddingProperty),
+ [~VerticalContentAlignmentProperty] = new TemplateBinding(VerticalContentAlignmentProperty),
+ [~HorizontalContentAlignmentProperty] = new TemplateBinding(HorizontalContentAlignmentProperty)
+ }.RegisterInNameScope(ns)));
+ }
+
///
/// Gets or sets the content to display.
///
diff --git a/src/Avalonia.Themes.Fluent/Controls/ContentControl.xaml b/src/Avalonia.Themes.Fluent/Controls/ContentControl.xaml
deleted file mode 100644
index f277c6f9ae..0000000000
--- a/src/Avalonia.Themes.Fluent/Controls/ContentControl.xaml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/src/Avalonia.Themes.Fluent/Controls/FluentControls.xaml b/src/Avalonia.Themes.Fluent/Controls/FluentControls.xaml
index 34aecd03e0..6ae561e821 100644
--- a/src/Avalonia.Themes.Fluent/Controls/FluentControls.xaml
+++ b/src/Avalonia.Themes.Fluent/Controls/FluentControls.xaml
@@ -58,7 +58,6 @@
-
@@ -77,6 +76,4 @@
-
-
diff --git a/src/Avalonia.Themes.Fluent/Controls/UserControl.xaml b/src/Avalonia.Themes.Fluent/Controls/UserControl.xaml
deleted file mode 100644
index bb75ec8bbc..0000000000
--- a/src/Avalonia.Themes.Fluent/Controls/UserControl.xaml
+++ /dev/null
@@ -1,25 +0,0 @@
-
diff --git a/src/Avalonia.Themes.Simple/Controls/ContentControl.xaml b/src/Avalonia.Themes.Simple/Controls/ContentControl.xaml
deleted file mode 100644
index 571a276a49..0000000000
--- a/src/Avalonia.Themes.Simple/Controls/ContentControl.xaml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/src/Avalonia.Themes.Simple/Controls/SimpleControls.xaml b/src/Avalonia.Themes.Simple/Controls/SimpleControls.xaml
index 51a21720b9..62a8fd1955 100644
--- a/src/Avalonia.Themes.Simple/Controls/SimpleControls.xaml
+++ b/src/Avalonia.Themes.Simple/Controls/SimpleControls.xaml
@@ -26,7 +26,6 @@
-
@@ -75,6 +74,4 @@
-
-
diff --git a/src/Avalonia.Themes.Simple/Controls/UserControl.xaml b/src/Avalonia.Themes.Simple/Controls/UserControl.xaml
deleted file mode 100644
index 7f33b803d7..0000000000
--- a/src/Avalonia.Themes.Simple/Controls/UserControl.xaml
+++ /dev/null
@@ -1,26 +0,0 @@
-
diff --git a/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs b/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs
index 9523d5db7f..3de13ba71b 100644
--- a/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs
@@ -430,7 +430,8 @@ namespace Avalonia.Controls.UnitTests
{
new ComboBoxItem()
{
- Content = parentContent.Child
+ Content = parentContent.Child,
+ Template = null // ugly hack, so we can "attach" same child to the two different trees
}
},
Template = GetTemplate()
diff --git a/tests/Avalonia.Controls.UnitTests/ContentControlTests.cs b/tests/Avalonia.Controls.UnitTests/ContentControlTests.cs
index 02b6592097..507227eff8 100644
--- a/tests/Avalonia.Controls.UnitTests/ContentControlTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/ContentControlTests.cs
@@ -363,8 +363,6 @@ namespace Avalonia.Controls.UnitTests
root.Child = null;
- Assert.Null(target.Template);
-
target.Content = null;
Assert.Empty(target.LogicalChildren);
diff --git a/tests/Avalonia.Controls.UnitTests/ItemsControlTests.cs b/tests/Avalonia.Controls.UnitTests/ItemsControlTests.cs
index 8302f1afc3..514add01ec 100644
--- a/tests/Avalonia.Controls.UnitTests/ItemsControlTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/ItemsControlTests.cs
@@ -717,7 +717,7 @@ namespace Avalonia.Controls.UnitTests
var target = CreateTarget(
dataContext: "Base",
itemsSource: items,
- dataTemplates: new[] { dataTemplate });
+ itemTemplate: dataTemplate);
var panel = Assert.IsAssignableFrom(target.ItemsPanelRoot);
var dataContexts = panel.Children
.Do(x => (x as ContentPresenter)?.UpdateChild())
diff --git a/tests/Avalonia.Controls.UnitTests/ListBoxTests.cs b/tests/Avalonia.Controls.UnitTests/ListBoxTests.cs
index a6a2a02479..56f20c6e8e 100644
--- a/tests/Avalonia.Controls.UnitTests/ListBoxTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/ListBoxTests.cs
@@ -181,10 +181,7 @@ namespace Avalonia.Controls.UnitTests
{
Template = ListBoxTemplate(),
DataContext = "Base",
- DataTemplates =
- {
- new FuncDataTemplate- ((x, _) => new Button { Content = x })
- },
+ ItemTemplate = new FuncDataTemplate
- ((x, _) => new Button { Content = x }),
ItemsSource = items,
};
diff --git a/tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs b/tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs
index 21e25a6f1c..3a74ee6a7f 100644
--- a/tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs
+++ b/tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs
@@ -20,7 +20,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Shift_Selecting_From_No_Selection_Selects_From_Start()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -46,7 +46,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Ctrl_Selecting_Raises_SelectionChanged_Events()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -104,7 +104,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Ctrl_Selecting_SelectedItem_With_Multiple_Selection_Active_Sets_SelectedItem_To_Next_Selection()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -138,7 +138,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Ctrl_Selecting_Non_SelectedItem_With_Multiple_Selection_Active_Leaves_SelectedItem_The_Same()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -169,7 +169,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Should_Ctrl_Select_Correct_Item_When_Duplicate_Items_Are_Present()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -197,7 +197,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Should_Shift_Select_Correct_Item_When_Duplicates_Are_Present()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -225,7 +225,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Can_Shift_Select_All_Items_When_Duplicates_Are_Present()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -253,7 +253,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Shift_Selecting_Raises_SelectionChanged_Events()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -305,7 +305,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Duplicate_Items_Are_Added_To_SelectedItems_In_Order()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -341,7 +341,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Left_Click_On_SelectedItem_Should_Clear_Existing_Selection()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -371,7 +371,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Right_Click_On_SelectedItem_Should_Not_Clear_Existing_Selection()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -399,7 +399,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Right_Click_On_UnselectedItem_Should_Clear_Existing_Selection()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -429,7 +429,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Shift_Right_Click_Should_Not_Select_Multiple()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -456,7 +456,7 @@ namespace Avalonia.Controls.UnitTests
[Fact]
public void Ctrl_Right_Click_Should_Not_Select_Multiple()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs
index 5fba91fafb..d7e55ba95c 100644
--- a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs
@@ -175,6 +175,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Setting_SelectedIndex_During_Initialize_Should_Select_Item_When_AlwaysSelected_Is_Used()
{
+ using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
var listBox = new ListBox
{
SelectionMode = SelectionMode.Single | SelectionMode.AlwaysSelected
@@ -1227,7 +1229,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Setting_SelectedItem_With_Pointer_Should_Set_TabOnceActiveElement()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -1249,7 +1251,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Removing_SelectedItem_Should_Clear_TabOnceActiveElement()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var items = new ObservableCollection(new[] { "Foo", "Bar", "Baz " });
@@ -1348,7 +1350,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Should_Select_Correct_Item_When_Duplicate_Items_Are_Present()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -1366,7 +1368,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Should_Apply_Selected_Pseudoclass_To_Correct_Item_When_Duplicate_Items_Are_Present()
{
- using (UnitTestApplication.Start())
+ using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
var target = new ListBox
{
@@ -1384,6 +1386,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Adding_Item_Before_SelectedItem_Should_Update_SelectedIndex()
{
+ using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
var items = new ObservableCollection
{
"Foo",
@@ -1409,6 +1413,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Removing_Item_Before_SelectedItem_Should_Update_SelectedIndex()
{
+ using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
var items = new ObservableCollection
{
"Foo",
@@ -1434,6 +1440,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Binding_SelectedIndex_Selects_Correct_Item()
{
+ using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
// Issue #4496 (part 2)
var items = new ObservableCollection();
@@ -1463,6 +1471,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Binding_SelectedItem_Selects_Correct_Item()
{
+ using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
// Issue #4496 (part 2)
var items = new ObservableCollection();
@@ -1493,6 +1503,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Replacing_Selected_Item_Should_Update_SelectedItem()
{
+ using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
var items = new ObservableCollection
{
"Foo",
@@ -1518,6 +1530,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void AutoScrollToSelectedItem_Causes_Scroll_To_SelectedItem()
{
+ using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
var items = new ObservableCollection
{
"Foo",
@@ -1543,6 +1557,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void AutoScrollToSelectedItem_Causes_Scroll_To_Initial_SelectedItem()
{
+ using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
var items = new ObservableCollection
{
"Foo",
@@ -1607,6 +1623,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void AutoScrollToSelectedItem_Scrolls_When_Reattached_To_Visual_Tree_If_Selection_Changed_While_Detached_From_Visual_Tree()
{
+ using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
var items = new ObservableCollection
{
"Foo",
@@ -1639,6 +1657,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void AutoScrollToSelectedItem_Doesnt_Scroll_If_Reattached_To_Visual_Tree_With_No_Selection_Change()
{
+ using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
var items = new ObservableCollection
{
"Foo",
@@ -1670,6 +1690,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void AutoScrollToSelectedItem_Causes_Scroll_When_Turned_On()
{
+ using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
var items = new ObservableCollection
{
"Foo",
@@ -1700,6 +1722,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
[Fact]
public void Can_Set_Both_SelectedItem_And_SelectedItems_During_Initialization()
{
+ using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
// Issue #2969.
var target = new ListBox();
var selectedItems = new List