2015-02-02 9 views
13

Ich habe vor kurzem begonnen, das Kinect SDK 2.0 und bin mit Schwerpunkt auf einer Zoom- und Pan-Funktionalität, wie im Control Basics-WPF Probe.Wie Zoom-Wert in Scroll-Viewer in C# wpf Kinect SDK 2.0 zu bekommen?

Ich habe die Zoom- und Pan-Funktionalität aufgestanden und läuft. Das Problem ist, dass ich auf den Wert der Zoomstufe zugreifen möchte, die mit der Pinch-Zoomgeste ausgeführt wurde.

Hier ist meine XAML:

<UserControl x:Class="ImageNav.NavigationImage" 
     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" 
     xmlns:k="http://schemas.microsoft.com/kinect/2014" 
     mc:Ignorable="d" 
     d:DesignWidth="1200" 
     d:DesignHeight="700" 
     > 

    <Grid Grid.RowSpan="2"> 
     <ScrollViewer Name="scrollViewer" Grid.Row="0" 
         HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" 
         k:KinectRegion.IsHorizontalRailEnabled="true" k:KinectRegion.IsVerticalRailEnabled="true" 
         k:KinectRegion.ZoomMode="Enabled"> 
      <Image Name="navigationImage" RenderTransformOrigin="0.5, 0.5" /> 
     </ScrollViewer> 
     <TextBox x:Name="ZoomTextBox" Grid.Row="1" TextWrapping="Wrap" Text="Zoom: 100%" IsEnabled="False" Panel.ZIndex="10" BorderThickness="0" HorizontalAlignment="Right" VerticalAlignment="Bottom" FontSize="20"/> 
    </Grid> 
</UserControl> 

wollte ich es würde zur Verfügung so etwas wie k:KinectRegion.ZoomFactor, aber das ist nicht sein. Ich habe auch versucht, zu sehen, welche Änderungen in den UI-Elementen, wenn ich die Zoomgeste durchführe, die Height und ActualHeight Eigenschaften der ScrollViewer scrollViewer und Image navigationImage in eine Protokolldatei schreiben, aber sie zeigen keinerlei Änderung.

Wenn ich die Zoom-Geste ausführen, würde Ich mag den Wert des Zooms das heißt die aktuelle Höhe und Breite des Bildes in Bezug auf die ursprüngliche Höhe und Breite erhalten.

+0

Können Sie auf die aktuelle transformieren, das angewendet wird und aus der Matrix vielleicht den Zoomfaktor ableiten? –

Antwort

5

Das hat nichts mit Kinect SDK zu tun hat, ist dies eher ein ScrollViewer Zoomen Problem. Es gibt keine k:KinectRegion.ZoomFactor da Zoomen nicht die tatsächliche Größe des Bildes ändert, es führt nur einige Layout-Transformationen, daher können Sie den Zoomfaktor von LayoutTransform Eigentum Ihrer Image bekommen.

So etwas wie der folgende Code sollte den Zoomfaktor erhalten:

UserControl.Code:

public NavigationImage() 
    { 
     InitializeComponent(); 
     DataContext = this; 
     _zoom = 1.0; 
    } 

    double _zoom; 
    public string ZoomPercentage 
    { 
     get 
     { 
      return _zoom * 100 + "%"; 
     } 
    } 

    private void scrollViewer_MouseWheel(object sender, MouseWheelEventArgs e) 
    { 
     if (e.Delta > 0) 
     { 
      _zoom += 0.1; 
     } 
     else 
     { 
      _zoom -= 0.1; 
     } 

     ScaleTransform scale = new ScaleTransform(_zoom, _zoom); 
     navigationImage.LayoutTransform = scale; 
     OnPropertyChanged("ZoomPercentage"); 
     e.Handled = true; 
    } 

UserControl.Xaml:

<UserControl x:Class="ImageNav.NavigationImage" ... > 

    <Grid Grid.RowSpan="2"> 
     <ScrollViewer Name="scrollViewer" Grid.Row="0" PreviewMouseWheel="scrollViewer_MouseWheel" 
     .... 
         HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" 
         k:KinectRegion.IsHorizontalRailEnabled="true" k:KinectRegion.IsVerticalRailEnabled="true" 
         k:KinectRegion.ZoomMode="Enabled" 
         > 
      <Image Name="navigationImage" RenderTransformOrigin="0.5, 0.5"/> 
     </ScrollViewer> 
     <TextBox x:Name="ZoomTextBox" Grid.Row="1" Text="{Binding ZoomPercentage, Mode=OneWay}" .... /> 
    </Grid> 
</UserControl>