Подтвердить что ты не робот

Как получить значение масштабирования в средстве просмотра прокрутки в С# wpf Kinect SDK 2.0?

Недавно я начал использовать Kinect SDK 2.0 и фокусируюсь на функции масштабирования и панорамирования, как в примере с базой управления - WPF.

У меня есть функция увеличения и панорамирования. Проблема в том, что я хочу получить доступ к значению увеличения масштаба, которое было выполнено жестом увеличения Pinch.

Вот мой 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>

Я бы хотел, чтобы там было что-то вроде k:KinectRegion.ZoomFactor, но это не доступно. Я также пытался увидеть, какие изменения в элементах пользовательского интерфейса выполняются при выполнении жестов увеличения, написав свойства Height и ActualHeight ScrollViewer scrollViewer и Image navigationImage в файле журнала, но они не показывают изменений бы то ни было.

Когда я выполняю жест масштабирования, я хотел бы получить значение масштабирования, то есть текущую высоту и ширину изображения относительно исходной высоты и ширины.

4b9b3361

Ответ 1

Это не имеет ничего общего с Kinect SDK, это скорее проблема масштабирования ScrollViewer. Нет k:KinectRegion.ZoomFactor, потому что масштабирование не изменяет фактический размер изображения, оно только выполняет некоторые преобразования макета, поэтому вы можете получить коэффициент масштабирования от свойства LayoutTransform вашего Image.

Что-то вроде следующего кода должно получить коэффициент масштабирования:

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>