diff --git a/src/Avalonia.Controls/Viewbox.cs b/src/Avalonia.Controls/Viewbox.cs index aabfd3ef18..07d877142e 100644 --- a/src/Avalonia.Controls/Viewbox.cs +++ b/src/Avalonia.Controls/Viewbox.cs @@ -42,6 +42,7 @@ namespace Avalonia.Controls // can be applied independently of the Viewbox and Child transforms. _containerVisual = new ViewboxContainer(); _containerVisual.RenderTransformOrigin = RelativePoint.TopLeft; + ((ISetLogicalParent)_containerVisual).SetParent(this); VisualChildren.Add(_containerVisual); } diff --git a/tests/Avalonia.Controls.UnitTests/ViewboxTests.cs b/tests/Avalonia.Controls.UnitTests/ViewboxTests.cs index 4ffd314857..629408bcba 100644 --- a/tests/Avalonia.Controls.UnitTests/ViewboxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ViewboxTests.cs @@ -1,4 +1,5 @@ using Avalonia.Controls.Shapes; +using Avalonia.Data; using Avalonia.LogicalTree; using Avalonia.Media; using Avalonia.UnitTests; @@ -207,6 +208,26 @@ namespace Avalonia.Controls.UnitTests Assert.Equal(new Size(200, 200), target.DesiredSize); } + [Fact] + public void Child_DataContext_Binding_Works() + { + var data = new + { + Foo = "foo", + }; + + var target = new Viewbox() + { + DataContext = data, + Child = new Canvas + { + [!Canvas.DataContextProperty] = new Binding("Foo"), + }, + }; + + Assert.Equal("foo", target.Child.DataContext); + } + private bool TryGetScale(Viewbox viewbox, out Vector scale) { if (viewbox.InternalTransform is null)