Browse Source

Add default template to the ContentControl, remove theme specific templates (#11365)

* Move ContentPresenter template to the property default value

* Fix some unit tests

* Fix more tests

* Fix more tests

* Update api rules
Max Katz 2 years ago
parent
commit
60c11167f8

+ 6 - 0
api/Avalonia.Themes.Fluent.nupkg.xml

@@ -403,6 +403,12 @@
     <Left>baseline/netstandard2.0/Avalonia.Themes.Fluent.dll</Left>
     <Right>target/netstandard2.0/Avalonia.Themes.Fluent.dll</Right>
   </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/UserControl.xaml</Target>
+    <Left>baseline/netstandard2.0/Avalonia.Themes.Fluent.dll</Left>
+    <Right>target/netstandard2.0/Avalonia.Themes.Fluent.dll</Right>
+  </Suppression>
   <Suppression>
     <DiagnosticId>CP0001</DiagnosticId>
     <Target>T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Window.xaml</Target>

+ 6 - 0
api/Avalonia.Themes.Simple.nupkg.xml

@@ -391,6 +391,12 @@
     <Left>baseline/netstandard2.0/Avalonia.Themes.Simple.dll</Left>
     <Right>target/netstandard2.0/Avalonia.Themes.Simple.dll</Right>
   </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0001</DiagnosticId>
+    <Target>T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/UserControl.xaml</Target>
+    <Left>baseline/netstandard2.0/Avalonia.Themes.Simple.dll</Left>
+    <Right>target/netstandard2.0/Avalonia.Themes.Simple.dll</Right>
+  </Suppression>
   <Suppression>
     <DiagnosticId>CP0001</DiagnosticId>
     <Target>T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Window.xaml</Target>

+ 18 - 0
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<VerticalAlignment> VerticalContentAlignmentProperty =
             AvaloniaProperty.Register<ContentControl, VerticalAlignment>(nameof(VerticalContentAlignment));
 
+        static ContentControl()
+        {
+            TemplateProperty.OverrideDefaultValue<ContentControl>(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)));
+        }
+
         /// <summary>
         /// Gets or sets the content to display.
         /// </summary>

+ 0 - 20
src/Avalonia.Themes.Fluent/Controls/ContentControl.xaml

@@ -1,20 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    x:ClassModifier="internal">
-  <ControlTheme x:Key="{x:Type ContentControl}" TargetType="ContentControl">
-    <Setter Property="Template">
-      <ControlTemplate>
-        <ContentPresenter Name="PART_ContentPresenter"
-                          Background="{TemplateBinding Background}"
-                          BorderBrush="{TemplateBinding BorderBrush}"
-                          BorderThickness="{TemplateBinding BorderThickness}"
-                          CornerRadius="{TemplateBinding CornerRadius}"
-                          ContentTemplate="{TemplateBinding ContentTemplate}"
-                          Content="{TemplateBinding Content}"
-                          Padding="{TemplateBinding Padding}"
-                          VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
-                          HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"/>
-      </ControlTemplate>
-    </Setter>
-  </ControlTheme>
-</ResourceDictionary>

+ 0 - 3
src/Avalonia.Themes.Fluent/Controls/FluentControls.xaml

@@ -58,7 +58,6 @@
                 <MergeResourceInclude Source="avares://Avalonia.Themes.Fluent/Controls/Window.xaml" />
                 <MergeResourceInclude Source="avares://Avalonia.Themes.Fluent/Controls/ComboBox.xaml" />
                 <MergeResourceInclude Source="avares://Avalonia.Themes.Fluent/Controls/ComboBoxItem.xaml" />
-                <MergeResourceInclude Source="avares://Avalonia.Themes.Fluent/Controls/ContentControl.xaml" />
                 <MergeResourceInclude Source="avares://Avalonia.Themes.Fluent/Controls/ContextMenu.xaml" />
                 <MergeResourceInclude Source="avares://Avalonia.Themes.Fluent/Controls/DataValidationErrors.xaml" />
                 <MergeResourceInclude Source="avares://Avalonia.Themes.Fluent/Controls/DateTimePickerShared.xaml" />
@@ -77,6 +76,4 @@
             </ResourceDictionary.MergedDictionaries>
         </ResourceDictionary>
     </Styles.Resources>
-
-    <StyleInclude Source="avares://Avalonia.Themes.Fluent/Controls/UserControl.xaml" />
 </Styles>

+ 0 - 25
src/Avalonia.Themes.Fluent/Controls/UserControl.xaml

@@ -1,25 +0,0 @@
-<Style xmlns="https://github.com/avaloniaui"
-       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-       Selector=":is(UserControl)"
-       x:ClassModifier="internal">
-  <Style.Resources>
-    <ControlTheme x:Key="FluentUserControl" TargetType="UserControl">
-      <Setter Property="Template">
-        <ControlTemplate>
-          <ContentPresenter Name="PART_ContentPresenter"
-                            Background="{TemplateBinding Background}"
-                            BorderBrush="{TemplateBinding BorderBrush}"
-                            BorderThickness="{TemplateBinding BorderThickness}"
-                            CornerRadius="{TemplateBinding CornerRadius}"
-                            ContentTemplate="{TemplateBinding ContentTemplate}"
-                            Content="{TemplateBinding Content}"
-                            Padding="{TemplateBinding Padding}"
-                            VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
-                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"/>
-        </ControlTemplate>
-      </Setter>
-    </ControlTheme>
-  </Style.Resources>
-  
-  <Setter Property="Theme" Value="{StaticResource FluentUserControl}" />
-</Style>

+ 0 - 21
src/Avalonia.Themes.Simple/Controls/ContentControl.xaml

@@ -1,21 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    x:ClassModifier="internal">
-  <ControlTheme x:Key="{x:Type ContentControl}"
-                TargetType="ContentControl">
-    <Setter Property="Template">
-      <ControlTemplate>
-        <ContentPresenter Name="PART_ContentPresenter"
-                          Padding="{TemplateBinding Padding}"
-                          HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
-                          VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
-                          Background="{TemplateBinding Background}"
-                          BorderBrush="{TemplateBinding BorderBrush}"
-                          BorderThickness="{TemplateBinding BorderThickness}"
-                          Content="{TemplateBinding Content}"
-                          ContentTemplate="{TemplateBinding ContentTemplate}"
-                          CornerRadius="{TemplateBinding CornerRadius}" />
-      </ControlTemplate>
-    </Setter>
-  </ControlTheme>
-</ResourceDictionary>

+ 0 - 3
src/Avalonia.Themes.Simple/Controls/SimpleControls.xaml

@@ -26,7 +26,6 @@
         <MergeResourceInclude Source="avares://Avalonia.Themes.Simple/Controls/TextBox.xaml" />
         <MergeResourceInclude Source="avares://Avalonia.Themes.Simple/Controls/AutoCompleteBox.xaml" />
         <MergeResourceInclude Source="avares://Avalonia.Themes.Simple/Controls/DataValidationErrors.xaml" />
-        <MergeResourceInclude Source="avares://Avalonia.Themes.Simple/Controls/ContentControl.xaml" />
         <MergeResourceInclude Source="avares://Avalonia.Themes.Simple/Controls/FlyoutPresenter.xaml" />
         <MergeResourceInclude Source="avares://Avalonia.Themes.Simple/Controls/MenuFlyoutPresenter.xaml" />
         <MergeResourceInclude Source="avares://Avalonia.Themes.Simple/Controls/GridSplitter.xaml" />
@@ -75,6 +74,4 @@
       </ResourceDictionary.MergedDictionaries>
     </ResourceDictionary>
   </Styles.Resources>
-
-  <StyleInclude Source="avares://Avalonia.Themes.Simple/Controls/UserControl.xaml" />
 </Styles>

+ 0 - 26
src/Avalonia.Themes.Simple/Controls/UserControl.xaml

@@ -1,26 +0,0 @@
-<Style xmlns="https://github.com/avaloniaui"
-       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-       Selector=":is(UserControl)"
-       x:ClassModifier="internal">
-  <Style.Resources>
-    <ControlTheme x:Key="SimpleUserControl"
-                  TargetType="UserControl">
-      <Setter Property="Template">
-        <ControlTemplate>
-          <ContentPresenter Name="PART_ContentPresenter"
-                            Padding="{TemplateBinding Padding}"
-                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
-                            VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
-                            Background="{TemplateBinding Background}"
-                            BorderBrush="{TemplateBinding BorderBrush}"
-                            BorderThickness="{TemplateBinding BorderThickness}"
-                            Content="{TemplateBinding Content}"
-                            ContentTemplate="{TemplateBinding ContentTemplate}"
-                            CornerRadius="{TemplateBinding CornerRadius}" />
-        </ControlTemplate>
-      </Setter>
-    </ControlTheme>
-  </Style.Resources>
-
-  <Setter Property="Theme" Value="{StaticResource SimpleUserControl}" />
-</Style>

+ 2 - 1
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()

+ 0 - 2
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);

+ 1 - 1
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<Panel>(target.ItemsPanelRoot);
             var dataContexts = panel.Children
                 .Do(x => (x as ContentPresenter)?.UpdateChild())

+ 1 - 4
tests/Avalonia.Controls.UnitTests/ListBoxTests.cs

@@ -181,10 +181,7 @@ namespace Avalonia.Controls.UnitTests
                 {
                     Template = ListBoxTemplate(),
                     DataContext = "Base",
-                    DataTemplates =
-                    {
-                        new FuncDataTemplate<Item>((x, _) => new Button { Content = x })
-                    },
+                    ItemTemplate = new FuncDataTemplate<Item>((x, _) => new Button { Content = x }),
                     ItemsSource = items,
                 };
 

+ 14 - 14
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
                 {

+ 32 - 4
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<string>(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<string>
             {
                "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<string>
             {
                "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<string>();
 
@@ -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<string>();
 
@@ -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<string>
             {
                "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<string>
             {
                "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<string>
             {
                "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<string>
             {
                "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<string>
             {
                "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<string>
             {
                "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<object>();
@@ -1891,6 +1915,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
         [Fact]
         public void Does_The_Best_It_Can_With_AutoSelecting_ViewModel()
         {
+            using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
             // Tests the following scenario:
             //
             // - Items changes from empty to having 1 item
@@ -1932,6 +1958,8 @@ namespace Avalonia.Controls.UnitTests.Primitives
         [Fact]
         public void Preserves_Initial_SelectedItems_When_Bound()
         {
+            using var _ = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
+
             // Issue #4272 (there are two issues there, this addresses the second one).
             var vm = new SelectionViewModel
             {