diff --git a/MapControl/MapImage.Silverlight.WinRT.cs b/MapControl/MapImage.Silverlight.WinRT.cs index 6cd66b48..2a9b6885 100644 --- a/MapControl/MapImage.Silverlight.WinRT.cs +++ b/MapControl/MapImage.Silverlight.WinRT.cs @@ -12,13 +12,13 @@ namespace MapControl { public partial class MapImage { - private static readonly Transform imageTransform = new MatrixTransform - { - Matrix = new Matrix(1d, 0d, 0d, -1d, 0d, 1d) - }; - private void SourceChanged(ImageSource image) { + var imageTransform = new MatrixTransform + { + Matrix = new Matrix(1d, 0d, 0d, -1d, 0d, 1d) + }; + Fill = new ImageBrush { ImageSource = image, diff --git a/MapControl/MapImage.WPF.cs b/MapControl/MapImage.WPF.cs index 3c3b7e75..3be1e5cf 100644 --- a/MapControl/MapImage.WPF.cs +++ b/MapControl/MapImage.WPF.cs @@ -2,7 +2,6 @@ // Copyright © Clemens Fischer 2012-2013 // Licensed under the Microsoft Public License (Ms-PL) -using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; @@ -10,19 +9,22 @@ namespace MapControl { public partial class MapImage { - private static readonly Transform imageTransform = new ScaleTransform(1d, -1d); - private void SourceChanged(ImageSource image) { var bitmap = image as BitmapSource; if (bitmap != null) { - image = new TransformedBitmap(bitmap, imageTransform); + var imageTransform = new ScaleTransform(1d, -1d); + imageTransform.Freeze(); + + bitmap = new TransformedBitmap(bitmap, imageTransform); + bitmap.Freeze(); + + image = bitmap; } Fill = new ImageBrush { ImageSource = image }; - SetBrushTransform(); } } } \ No newline at end of file diff --git a/MapControl/MapRectangle.WPF.cs b/MapControl/MapRectangle.WPF.cs index 0c5c0679..c5f08281 100644 --- a/MapControl/MapRectangle.WPF.cs +++ b/MapControl/MapRectangle.WPF.cs @@ -13,20 +13,9 @@ namespace MapControl { StrokeThicknessProperty.OverrideMetadata( typeof(MapRectangle), new FrameworkPropertyMetadata(0d)); - } - protected void SetBrushTransform() - { - var tileBrush = Fill as TileBrush; - - if (tileBrush != null && Data != null) - { - var geometry = (RectangleGeometry)Data; - - tileBrush.ViewportUnits = BrushMappingMode.Absolute; - tileBrush.Viewport = geometry.Rect; - tileBrush.Transform = geometry.Transform; - } + FillProperty.OverrideMetadata( + typeof(MapRectangle), new FrameworkPropertyMetadata(FillPropertyChanged)); } private void SetGeometry(Rect rect) @@ -40,7 +29,8 @@ namespace MapControl geometry.Rect = rect; geometry.Transform = ParentMap.ViewportTransform; - SetBrushTransform(); + + SetBrushTransform(Fill as TileBrush); } private void ClearGeometry() @@ -50,5 +40,25 @@ namespace MapControl geometry.ClearValue(RectangleGeometry.RectProperty); geometry.ClearValue(Geometry.TransformProperty); } + + private void SetBrushTransform(TileBrush tileBrush) + { + if (tileBrush != null && Data != null) + { + var geometry = (RectangleGeometry)Data; + + tileBrush.ViewportUnits = BrushMappingMode.Absolute; + tileBrush.Viewport = geometry.Rect; + tileBrush.Transform = geometry.Transform; + } + } + + private static void FillPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) + { + if (e.NewValue != e.OldValue) + { + ((MapRectangle)o).SetBrushTransform(e.NewValue as TileBrush); + } + } } }