ThinkGeo.com    |     Documentation    |     Premium Support

Unable to cast object of type 'System.Windows.Media.MatrixTransform after migrating to version 9

Hi there,



I have recently upgraded our Think Map site library from version 7 to 9. 



The project compiles without a problem, but it throws an exception at runtime in initial load:




Exception classes: 
   System.InvalidCastException
Exception messages: 
   Unable to cast object of type ‘System.Windows.Media.MatrixTransform’ to type ‘System.Windows.Media.ScaleTransform’.
Stack Traces:
   at ThinkGeo.MapSuite.WpfDesktopEdition.WpfMap.MxU=()
   at ThinkGeo.MapSuite.WpfDesktopEdition.WpfMap.OnApplyTemplate()

Apparently it is coming from MapSuite library. I tried to recreate it in a light project but it works fine there, however, we can’t get it to work in our main project. 



Any idea what is wrong?



This is the full stack trace in case you need it:




Exception classes: 
   System.InvalidCastException
Exception messages: 
   Unable to cast object of type ‘System.Windows.Media.MatrixTransform’ to type ‘System.Windows.Media.ScaleTransform’.
Stack Traces:
   at ThinkGeo.MapSuite.WpfDesktopEdition.WpfMap.MxU=()
   at ThinkGeo.MapSuite.WpfDesktopEdition.WpfMap.OnApplyTemplate()
   at System.Windows.FrameworkElement.ApplyTemplate()
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
   at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Border.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
   at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
   at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.DockPanel.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Border.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
   at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
   at System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Decorator.MeasureOverride(Size constraint)
   at System.Windows.Documents.AdornerDecorator.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Window.MeasureOverrideHelper(Size constraint)
   at System.Windows.Window.MeasureOverride(Size availableSize)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Interop.HwndSource.SetLayoutSize()
   at System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)
   at System.Windows.Window.SetRootVisual()
   at System.Windows.Window.SetRootVisualAndUpdateSTC()
   at System.Windows.Window.SetupInitialState(Double requestedTop, Double requestedLeft, Double requestedWidth, Double requestedHeight)
   at System.Windows.Window.CreateSourceWindow(Boolean duringShow)
   at System.Windows.Window.ShowHelper(Object booleanBox)
   at Core.App.CheckLicense() in D:\Projects\Development\Core\Core\App.xaml.cs:line 126





Thanks,

Shahin








Hi Shaahin, 
  
 From your error stack information, I have some insights for this issue. 
  
 I guess your project contains Marker Or Popup canvas with MatrixTransform. While we added Marker and Popup canvas with ScaleTransform in map after MapSuite 8.0, So, please check your code in Marker/Popup canvas. 
  
 Here is sample code we used for Marker and Popup canvas. 
  
     <Canvas.RenderTransform> 
         <ScaleTransform x:Name="MarkerCanvasZoomTransform"></ScaleTransform> 
     </Canvas.RenderTransform> 
  
  
     <Canvas.RenderTransform> 
         <ScaleTransform x:Name="PopupCanvasZoomTransform"></ScaleTransform> 
     </Canvas.RenderTransform> 
  
  
 Thanks

Hi Shaahin, 
  
 From your error stack information, I have some insights for this issue. 
  
 I guess your project contains Marker Or Popup canvas with MatrixTransform. While we added Marker and Popup canvas with ScaleTransform in map after MapSuite 8.0, So, please check your code in Marker/Popup canvas. 
  
 Here is sample code we used for Marker and Popup canvas. 
  
  
  
  
  <Canvas x:Name="MarkerCanvas" >
    <Canvas.RenderTransform>
        <ScaleTransform x:Name="MarkerCanvasZoomTransform"></ScaleTransform>
    </Canvas.RenderTransform>
</Canvas>
<Canvas x:Name="PopupCanvas" >
    <Canvas.RenderTransform>
        <ScaleTransform x:Name="PopupCanvasZoomTransform"></ScaleTransform>
    </Canvas.RenderTransform>
</Canvas>
 
  
 Thanks

Hi Don, 
  
 Thanks for your reply.  
 I’ve added replaced  
 
<Canvas x:Name=“MarkerCanvas” />
 
 
 With your mentioned code but it didn’t do the trick, We still got problem, however, the exception has changed: 
  
 
   at ThinkGeo.MapSuite.WpfDesktopEdition.WpfMap.MxU=()
   at ThinkGeo.MapSuite.WpfDesktopEdition.WpfMap.OnApplyTemplate()
   at System.Windows.FrameworkElement.ApplyTemplate()
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
   at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Border.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
   at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
   at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.DockPanel.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Border.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
   at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
   at System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Decorator.MeasureOverride(Size constraint)
   at System.Windows.Documents.AdornerDecorator.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Window.MeasureOverrideHelper(Size constraint)
   at System.Windows.Window.MeasureOverride(Size availableSize)
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.Interop.HwndSource.SetLayoutSize()
   at System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)
   at System.Windows.Window.SetRootVisual()
   at System.Windows.Window.SetRootVisualAndUpdateSTC()
   at System.Windows.Window.SetupInitialState(Double requestedTop, Double requestedLeft, Double requestedWidth, Double requestedHeight)
   at System.Windows.Window.CreateSourceWindow(Boolean duringShow)
   at System.Windows.Window.ShowHelper(Object booleanBox)
   at Core.App.CheckLicense() in D:\Projects\Development\Core\Core\App.xaml.cs:line 112
   at Core.App.OnStartup(StartupEventArgs e) in D:\Projects\Development\Core\Core\App.xaml.cs:line 85
 
  
 Any idea? 
  
 Thanks.

Hi Shaahin, 
  
 It looks you hadn’t paste the new exception information here and you don’t need add . 
  
 From your original exception information, your code should contains MatrixTransform class, please remove that if possible. 
  
 If you need to use it, please replace that to ScaleTransform. 
  
 Regards, 
  
 Don

Hi Shaahin, 
  
 It looks you hadn’t paste the new exception information here and you don’t need add . 
  
 From your original exception information, your code should contains MatrixTransform class, please remove that if possible. 
  
 If you need to use it, please replace that to ScaleTransform. 
  
 Regards, 
  
 Don

Hi Shaahin, 
  
 It looks you hadn’t paste the new exception information here and you don’t need add  
  
  <Canvas x:Name=“MarkerCanvas” />. 
  
 From your original exception information, your code should contains MatrixTransform class, please remove that if possible. 
  
 If you need to use it, please replace that to ScaleTransform. 
  
 Regards, 
  
 Don

Hi Don,



Thanks for your reply.



First of all I have searched all the solution for MatrixTransform, I can’t find any usage. Is there any other way which I can find out if I used MetrixTransform? What I was done is searching for MatrixTransform in all the solution using Visual Studio and didn’t find any.



Regarding posting below snippet in my resources, I get exception no matter if I use the snippet or not.



When I paste 





<Canvas x:Name=“MarkerCanvas” />







in the resources I get this exception:



Unable to cast object of type ‘System.Windows.Media.MatrixTransform’ to type ‘System.Windows.Media.ScaleTransform’.



When I remove it I get the below exception:


Object reference not set to an instance of an object.


And when I use 


<Canvas x:Name=“MarkerCanvas” >
    <Canvas.RenderTransform>
        <ScaleTransform x:Name=“MarkerCanvasZoomTransform”><!–</code–>ScaleTransform>

    <!–</code–>Canvas.RenderTransform>

<!–</code–>Canvas>




[code]
I get below exception again.


Object reference not sets to an instance of an object.



Is there anything which I am doing wrong? 
Unfortunately, This has completely stopped our development process, We are about to decide to rollback to version 7 as it is too much hassle to upgrade.



Regards, 
Shahin







<

Hi Shaahin,  
  
 I am sorry to hear this issue stopped your upgrade. 
  
 Because we cannot reproduce that and we hadn’t met that before, so we can only guess what’s the problem from your exception. 
  
 I think your project may be a little complex and contains some custom controls, so if you can create a simple sample which can reproduce that should be helpful.  
  
 When you want to upgrade again please let us know, we will keep help you on it. 
  
 Regards, 
  
 Don

Hi Don,



Thanks for your reply. 



Fair enough, if you can’t recreate the issue you can’t fix it. 



I have tried to recreate it in a light sample and it did the job.

Would you be kind enough to have a look and let me know how we can fix it?  Guess you need to correct the references path, and please consider that although our references are addressed to Map Suite WPF Desktop Full Edition 7.0 but, in fact, we have pasted version 9 dlls to the mentioned folder.



What I’ve done was adding a new style to the map control and past our styles from the real application to the light one which I reproduced for you.



Thanks,
Shahin




001_WmsTest.zip (83.2 KB)

Hi Shahin,



Thanks for your sample. Your code cannot works because the element tree in WPFMap had been changed between version 7.0 and 9.0, and your code override the format.



Please test the attached file which had been modified for 9.0.



Wish that works for you.



Regards,



Don

MainWindow.zip (1.01 KB)

Many thanks, Don,  
  
 This has fixed the problem (: 
  
 Regards, 
 Shahin

Great to hear it helps. 
  
 Any other questions, don’t hesitate to let us know. 
  
 Thanks, 
  
 Troy