diff --git a/src/Avalonia.Controls/TableView.cs b/src/Avalonia.Controls/TableView.cs index 87141677f0..6fbc634478 100644 --- a/src/Avalonia.Controls/TableView.cs +++ b/src/Avalonia.Controls/TableView.cs @@ -5,6 +5,7 @@ using Avalonia.Collections; using Avalonia.Controls.Presenters; using Avalonia.Controls.Templates; using Avalonia.Data; +using Avalonia.LogicalTree; using Avalonia.Metadata; using static Avalonia.Controls.Presenters.TableViewLayoutHelper; @@ -139,6 +140,7 @@ public class TableView : ListBox } column.TableView = this; + ((ISetLogicalParent)column).SetParent(this); } private void DetachColumn(TableViewColumn column) @@ -146,6 +148,7 @@ public class TableView : ListBox Debug.Assert(column.TableView == this || column.TableView is null); column.TableView = null; + ((ISetLogicalParent)column).SetParent(null); column.ActualWidth = double.NaN; } diff --git a/tests/Avalonia.Controls.UnitTests/TableViewTests.cs b/tests/Avalonia.Controls.UnitTests/TableViewTests.cs index 139a11c13d..e347d436da 100644 --- a/tests/Avalonia.Controls.UnitTests/TableViewTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TableViewTests.cs @@ -70,6 +70,47 @@ public sealed class TableViewTests : ScopedTestBase Assert.Null(column.TableView); } + [Fact] + public void Column_LogicalParent_Is_Set_When_Added_And_Unset_When_Removed() + { + using var app = Start(); + + var target = CreateTarget(new[] { "Foo" }); + var column = new TableViewColumn(); + target.Columns.Add(column); + + Prepare(target); + + Assert.Same(target, column.GetLogicalParent()); + + target.Columns.Remove(column); + + Assert.Null(column.GetLogicalParent()); + } + + [Fact] + public void Column_Receives_Styles_From_TableView() + { + using var app = Start(); + + var target = CreateTarget(new[] { "Foo" }); + var style = new Style(x => x.OfType().Class("right-align")) + { + Setters = { new Setter(TableViewColumn.HorizontalContentAlignmentProperty, HorizontalAlignment.Right) } + }; + target.Styles.Add(style); + + var column = new TableViewColumn + { + Classes = { "right-align" } + }; + target.Columns.Add(column); + + Prepare(target); + + Assert.Equal(HorizontalAlignment.Right, column.HorizontalContentAlignment); + } + [Fact] public void Column_Cannot_Belong_To_Two_TableViews() {