diff --git a/src/Avalonia.Controls/LayoutTransformControl.cs b/src/Avalonia.Controls/LayoutTransformControl.cs
index 87e3853643..73d5e61e03 100644
--- a/src/Avalonia.Controls/LayoutTransformControl.cs
+++ b/src/Avalonia.Controls/LayoutTransformControl.cs
@@ -5,20 +5,17 @@
// http://silverlight.codeplex.com/SourceControl/changeset/view/74775#Release/Silverlight4/Source/Controls.Layout.Toolkit/LayoutTransformer/LayoutTransformer.cs
//
-using Avalonia.Controls.Primitives;
-using Avalonia.Media;
-using Avalonia.VisualTree;
using System;
using System.Diagnostics.CodeAnalysis;
-using System.Linq;
using System.Reactive.Linq;
+using Avalonia.Media;
namespace Avalonia.Controls
{
///
/// Control that implements support for transformations as if applied by LayoutTransform.
///
- public class LayoutTransformControl : ContentControl
+ public class LayoutTransformControl : Decorator
{
public static readonly AvaloniaProperty LayoutTransformProperty =
AvaloniaProperty.Register(nameof(LayoutTransform));
@@ -27,6 +24,9 @@ namespace Avalonia.Controls
{
LayoutTransformProperty.Changed
.AddClassHandler(x => x.OnLayoutTransformChanged);
+
+ ChildProperty.Changed
+ .AddClassHandler(x => x.OnChildChanged);
}
///
@@ -38,8 +38,7 @@ namespace Avalonia.Controls
set { SetValue(LayoutTransformProperty, value); }
}
- public Control TransformRoot => _transformRoot ??
- (_transformRoot = this.GetVisualChildren().OfType().FirstOrDefault());
+ public IControl TransformRoot => Child;
///
/// Provides the behavior for the "Arrange" pass of layout.
@@ -132,16 +131,8 @@ namespace Avalonia.Controls
return transformedDesiredSize;
}
- ///
- /// Builds the visual tree for the LayoutTransformerControl when a new
- /// template is applied.
- ///
- protected override void OnTemplateApplied(TemplateAppliedEventArgs e)
+ private void OnChildChanged(AvaloniaPropertyChangedEventArgs e)
{
- base.OnTemplateApplied(e);
-
- _matrixTransform = new MatrixTransform();
-
if (null != TransformRoot)
{
TransformRoot.RenderTransform = _matrixTransform;
@@ -169,14 +160,14 @@ namespace Avalonia.Controls
///
/// RenderTransform/MatrixTransform applied to TransformRoot.
///
- private MatrixTransform _matrixTransform;
+ private MatrixTransform _matrixTransform = new MatrixTransform();
///
/// Transformation matrix corresponding to _matrixTransform.
///
private Matrix _transformation;
private IDisposable _transformChangedEvent = null;
- private Control _transformRoot;
+
///
/// Returns true if Size a is smaller than Size b in either dimension.
///
@@ -215,7 +206,8 @@ namespace Avalonia.Controls
///
private void ApplyLayoutTransform()
{
- if (LayoutTransform == null) return;
+ if (LayoutTransform == null)
+ return;
// Get the transform matrix and apply it
_transformation = RoundMatrix(LayoutTransform.Value, DecimalsAfterRound);
@@ -376,11 +368,8 @@ namespace Avalonia.Controls
{
var newTransform = e.NewValue as Transform;
- if (_transformChangedEvent != null)
- {
- _transformChangedEvent.Dispose();
- _transformChangedEvent = null;
- }
+ _transformChangedEvent?.Dispose();
+ _transformChangedEvent = null;
if (newTransform != null)
{
@@ -392,4 +381,4 @@ namespace Avalonia.Controls
ApplyLayoutTransform();
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Avalonia.Themes.Default/DefaultTheme.xaml b/src/Avalonia.Themes.Default/DefaultTheme.xaml
index 2b9132ee56..16705f91c2 100644
--- a/src/Avalonia.Themes.Default/DefaultTheme.xaml
+++ b/src/Avalonia.Themes.Default/DefaultTheme.xaml
@@ -12,7 +12,6 @@
-
diff --git a/src/Avalonia.Themes.Default/LayoutTransformControl.xaml b/src/Avalonia.Themes.Default/LayoutTransformControl.xaml
deleted file mode 100644
index b26f053622..0000000000
--- a/src/Avalonia.Themes.Default/LayoutTransformControl.xaml
+++ /dev/null
@@ -1,13 +0,0 @@
-
\ No newline at end of file
diff --git a/tests/Avalonia.Controls.UnitTests/LayoutTransformControlTests.cs b/tests/Avalonia.Controls.UnitTests/LayoutTransformControlTests.cs
index d5f9818f89..13c946b549 100644
--- a/tests/Avalonia.Controls.UnitTests/LayoutTransformControlTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/LayoutTransformControlTests.cs
@@ -1,6 +1,4 @@
-using Avalonia.Controls.Presenters;
using Avalonia.Controls.Shapes;
-using Avalonia.Controls.Templates;
using Avalonia.Media;
using Xunit;
@@ -311,20 +309,10 @@ namespace Avalonia.Controls.UnitTests
{
var lt = new LayoutTransformControl()
{
- LayoutTransform = transform,
- Template = new FuncControlTemplate(
- p => new ContentPresenter() { Content = p.Content })
+ LayoutTransform = transform
};
- lt.Content = new Rectangle() { Width = width, Height = height };
-
- lt.ApplyTemplate();
-
- //we need to force create visual child
- //so the measure after is correct
- (lt.Presenter as ContentPresenter).UpdateChild();
-
- Assert.NotNull(lt.Presenter?.Child);
+ lt.Child = new Rectangle() { Width = width, Height = height };
lt.Measure(Size.Infinity);
lt.Arrange(new Rect(lt.DesiredSize));
@@ -332,4 +320,4 @@ namespace Avalonia.Controls.UnitTests
return lt;
}
}
-}
\ No newline at end of file
+}