diff --git a/src/Avalonia.Controls/LayoutTransformControl.cs b/src/Avalonia.Controls/LayoutTransformControl.cs index 482cfc5320..07372eb714 100644 --- a/src/Avalonia.Controls/LayoutTransformControl.cs +++ b/src/Avalonia.Controls/LayoutTransformControl.cs @@ -20,6 +20,9 @@ namespace Avalonia.Controls public static readonly AvaloniaProperty LayoutTransformProperty = AvaloniaProperty.Register(nameof(LayoutTransform)); + public static readonly AvaloniaProperty UseRenderTransformProperty = + AvaloniaProperty.Register(nameof(LayoutTransform)); + static LayoutTransformControl() { ClipToBoundsProperty.OverrideDefaultValue(true); @@ -29,6 +32,7 @@ namespace Avalonia.Controls ChildProperty.Changed .AddClassHandler(x => x.OnChildChanged); + UseRenderTransformProperty.Changed.AddClassHandler(x => x.OnUseRenderTransformPropertyChanged); } /// @@ -40,6 +44,15 @@ namespace Avalonia.Controls set { SetValue(LayoutTransformProperty, value); } } + /// + /// Utilize the for layout transforms. + /// + public bool UseRenderTransform + { + get { return GetValue(UseRenderTransformProperty); } + set { SetValue(UseRenderTransformProperty, value); } + } + public IControl TransformRoot => Child; /// @@ -134,6 +147,42 @@ namespace Avalonia.Controls return transformedDesiredSize; } + IDisposable _renderTransformChangedEvent; + + private void OnUseRenderTransformPropertyChanged(AvaloniaPropertyChangedEventArgs e) + { + // HACK: In theory, this method and the UseRenderTransform shouldn't exist but + // it's hard to animate this particular control with style animations without + // PropertyPaths. + // + // So until we get that implemented, we'll stick on this not-so-good + // workaround. + + var target = e.Sender as LayoutTransformControl; + var shouldUseRenderTransform = (bool)e.NewValue; + if (target != null) + { + if (shouldUseRenderTransform) + { + _renderTransformChangedEvent = RenderTransformProperty.Changed + .Subscribe( + (x) => + { + var target2 = x.Sender as LayoutTransformControl; + if (target2 != null) + { + target2.LayoutTransform = target2.RenderTransform; + } + }); + } + else + { + _renderTransformChangedEvent?.Dispose(); + LayoutTransform = null; + } + } + } + private void OnChildChanged(AvaloniaPropertyChangedEventArgs e) { if (null != TransformRoot) diff --git a/src/Avalonia.Themes.Default/NotificationArea.xaml b/src/Avalonia.Themes.Default/NotificationArea.xaml index a6143e1a30..13adbbc0b6 100644 --- a/src/Avalonia.Themes.Default/NotificationArea.xaml +++ b/src/Avalonia.Themes.Default/NotificationArea.xaml @@ -30,20 +30,18 @@ - - - - + + + + + - + @@ -63,25 +61,27 @@ - + +