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(); @@ -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 {