@@ -18,6 +18,8 @@ namespace Windows.UI.Xaml.Controls
18
18
public partial class Viewbox : global ::Windows . UI . Xaml . FrameworkElement
19
19
{
20
20
private readonly Border _container ;
21
+ internal double scaleX { get ; private set ; }
22
+ internal double scaleY { get ; private set ; }
21
23
22
24
public Viewbox ( )
23
25
{
@@ -45,7 +47,7 @@ protected override Size MeasureOverride(Size availableSize)
45
47
)
46
48
) ;
47
49
48
- var ( scaleX , scaleY ) = GetScale ( availableSize , measuredSize ) ;
50
+ ( scaleX , scaleY ) = GetScale ( availableSize , measuredSize ) ;
49
51
50
52
return new Size (
51
53
Math . Min ( availableSize . Width , measuredSize . Width * scaleX ) ,
@@ -55,13 +57,26 @@ protected override Size MeasureOverride(Size availableSize)
55
57
56
58
protected override Size ArrangeOverride ( Size finalSize )
57
59
{
60
+ if ( finalSize . Width == 0 || finalSize . Height == 0 )
61
+ {
62
+ return default ;
63
+ }
64
+
58
65
var ( scaleX , scaleY ) = GetScale ( finalSize , _container . DesiredSize ) ;
59
66
60
- _container . RenderTransform = new ScaleTransform ( )
67
+ if ( Math . Abs ( scaleX - 1d ) < 0.001d && Math . Abs ( scaleY - 1d ) < 0.001d )
61
68
{
62
- ScaleX = scaleX ,
63
- ScaleY = scaleY
64
- } ;
69
+ _container . RenderTransform = null ;
70
+ }
71
+ else
72
+ {
73
+ var transform = _container . RenderTransform as ScaleTransform ?? new ScaleTransform ( ) ;
74
+ transform . ScaleX = scaleX ;
75
+ transform . ScaleY = scaleY ;
76
+ transform . CenterX = finalSize . Width / 2d ;
77
+ transform . CenterY = finalSize . Height / 2d ;
78
+ _container . RenderTransform = transform ;
79
+ }
65
80
66
81
base . ArrangeElement ( _container , new Rect ( new Point ( ) , _container . DesiredSize ) ) ;
67
82
0 commit comments