title: XAML: transform position on panel without transforming the element
body: <p>I want to position elements on a <code>Canvas</code> (in my case it's several graphical and text elements) and <strong>transform the position</strong> of these elements by a <code>Transform</code>, but <strong>not</strong> transform the <strong>elements themselves</strong>. The <code>Transform</code> needs to be changed dynamically, like for resizing or changing the rotation angle. I do not want to touch the elements but only the transform that I am binding to.</p>
  
  <p>What I have now:</p>
  
  <pre class="lang-xml prettyprint-override"><code>&lt;UserControl x:Class="IDEAUserInterfaces.StationaryUI.UserControl1"
               xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
               xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
               xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
               mc:Ignorable="d" 
               d:DesignHeight="300" d:DesignWidth="300"&gt;
      &lt;UserControl.Resources&gt;
          &lt;TranslateTransform x:Key="translate" X="10" Y="10"/&gt;
          &lt;ScaleTransform x:Key="scale" ScaleX="0.8" ScaleY="1.3"/&gt;
          &lt;RotateTransform x:Key="rotate" Angle="30"/&gt;
          &lt;TransformGroup x:Key="group"&gt;
              &lt;StaticResource ResourceKey="translate"/&gt;
              &lt;StaticResource ResourceKey="scale"/&gt;
              &lt;StaticResource ResourceKey="rotate"/&gt;
          &lt;/TransformGroup&gt;
      &lt;/UserControl.Resources&gt;
      &lt;Grid&gt;
          &lt;Canvas Width="100" Height="100"&gt;
              &lt;Canvas Name="elementCanvas" Canvas.Top="15" Canvas.Left="20"&gt;
                  &lt;Path Stroke="Green" StrokeThickness="1"&gt;
                      &lt;Path.Data&gt;
                          &lt;EllipseGeometry RadiusX="5" RadiusY="5" Center="0,0" Transform="{Binding StaticResource group}"/&gt;
                      &lt;/Path.Data&gt;
                  &lt;/Path&gt;
                  &lt;TextBlock Text="Text" Canvas.Left="10" FontSize="10"/&gt;
              &lt;/Canvas&gt;
          &lt;/Canvas&gt;
      &lt;/Grid&gt;
  &lt;/UserControl&gt;
  </code></pre>
  
  <p>Obviously the position of <em>elementCanvas</em> sets the position of the contained graphics and text. Setting <code>Transform</code> on the <code>EllipseGeometry</code> transforms the whole geometry. I found no way to tranform a <code>Point</code> in XAML, for example the <code>Center</code>-property of EllipseGeomtry. Still this would not change the position of the <code>TextBlock</code>.</p>
  
  <p>Transforming <code>Canvas.Top</code> and <code>Canvas.Left</code> would be enough, I think, but how could this be done?</p>