设置图像的布局变换而不创建新的矩阵变换

时间:2015-02-04 15:12:09

标签: c# wpf wpf-controls kinect kinect-sdk

提出问题 快速访问 搜索相关主题

我有以下xaml代码:

     <Grid Name="navigationGrid" Grid.RowSpan="2">
    <ScrollViewer Name="scrollViewer" Grid.Row="0"
                  HorizontalScrollBarVisibility="Hidden"  VerticalScrollBarVisibility="Hidden"
                  k:KinectRegion.IsHorizontalRailEnabled="true"

                  k:KinectRegion.IsVerticalRailEnabled="true"
                  k:KinectRegion.ZoomMode="Enabled" LayoutUpdated="scrollViewer_LayoutUpdated" >
        <Image Name="navigationImage" RenderTransformOrigin="0.5, 0.5"/>
    </ScrollViewer>
   </Grid>

现在我想手动更改图像的缩放,即假设为缩放值Z,所以我执行以下操作:

  System.Windows.Media.Matrix m = navigationImage.LayoutTransform.Value;
   m.ScaleAtPrepend(Z / m.M11), Z / m.M11, m.M21, m.M22);                      //Z is the zoom value
   navigationImage.LayoutTransform = new System.Windows.Media.MatrixTransform(m);

但是在对图像执行layoutTransform之后,我现在无法使用kinect缩放手势。我想这是由于分配了新的LayoutTransform。

所以而不是

     new System.Windows.Media.MatrixTransform(m); 

我想要像

这样的东西
    navigationImage.LayoutTransform.SetValue(ScaleTransform.ScaleXProperty, Z / m.M11); 

但是这给了我一个错误&#34;无法在对象上设置属性&#39; Identity&#39;因为它处于只读状态。&#34;所以我的问题是如何为layoutTransform设置新值。

1 个答案:

答案 0 :(得分:0)

将“缩放变换”设置为“布局变换”,然后更新“缩放变换”。

var scale = new ScaleTransform();
navigationImage.LayoutTransform = scale;

// Elsewhere...
scale.ScaleX = newValue;