Как увеличить масштаб по центру в программе просмотра прокрутки при использовании ZoomToFactor для увеличения уровня масштабирования при нажатии кнопки

#c# #xaml #uwp #scrollviewer #zooming

#c# #xaml #uwp #scrollviewer #масштабирование

Вопрос:

Я использую программу просмотра прокрутки для увеличения изображения, которое задано в качестве фона для сетки.Когда я устанавливаю значение коэффициента масштабирования при нажатии кнопки из кода позади с помощью ScrollViewer.ZoomToFactor (масштабирующий фактор) изображение увеличивается из верхнего левого угла, а не из центральной позиции.

Пожалуйста, получите образец по ссылке ниже или приведенный ниже фрагмент кода для справки. Ссылка: https://github.com/ragulsv/ScrollViewer

Фрагмент кода [C #]:

     float count = 1;
    private void Clr_Click(object sender, RoutedEventArgs e)
    {
        count = 1;
         viewer.ZoomToFactor(count);
        viewer.RenderTransformOrigin = new Point(0.5, 0.5);
    }
    private void Btn_Click(object sender, RoutedEventArgs e)
    {
         viewer.ZoomToFactor(count);
        viewer.RenderTransformOrigin = new Point(0.5, 0.5);
        count  = 1;
    }
  

Фрагмент кода [Xaml]:

    <Grid x:Name="grid1">
    <Grid.RowDefinitions>
        <RowDefinition Height="0.1*">

        </RowDefinition>
        <RowDefinition Height="0.1*">

        </RowDefinition>
        <RowDefinition Height="0.8*">

        </RowDefinition>
    </Grid.RowDefinitions>
    <Button x:Name="btn" Grid.Row="0"></Button>
    <Button x:Name="clr" Grid.Row="1"></Button>
    <ScrollViewer x:Name="viewer" Grid.Row="2" ZoomMode="Enabled">
        <Grid>
          <Image Source="AssetsEditedImage.jpg" Height="190" Width="190"/>
        </Grid>
    </ScrollViewer>
</Grid>
  

Комментарии:

1. вы пробовали установить RenderTransformOrigin значение «0.5, 0.5» ?

2. Даже я попробовал ‘RenderTransformOrigin’ преобразовать в «0.5, 0.5». Это также не работает.

Ответ №1:

Как увеличить масштаб по центру в программе просмотра прокрутки при использовании ZoomToFactor для увеличения уровня масштабирования при нажатии кнопки

Для этого сценария вы могли бы установить родительский элемент изображения, Grid VerticalAlignment="Center" HorizontalAlignment="Center" который мог бы всегда фиксировать изображение в центре ScrollViewer , а затем вызвать метод ChangeView для редактирования ZoomFactor .

 private void Btn_Click(object sender, RoutedEventArgs e)
{
    viewer.ChangeView(0, 0, (viewer.ZoomFactor   1f));       
}
  

Комментарии:

1. Спасибо, я даже попробовал этот метод тоже. Это не работает.

2. Здесь у меня есть образец загрузки, пожалуйста, проверьте.

3. Спасибо, пример работает так, как я ожидал. Но я хочу прояснить, что изображение получает центр только при настройке выравнивания по горизонтали и вертикали для сетки в качестве центра.

4. Но изображение становится центральным, даже если мы увеличим ScrollViewer с помощью редактирования значения ZoomToFactor, установив выравнивание сетки по вертикали и горизонтали по центру. Можете ли вы проверить это и обновить свой ответ. Я отмечу это после того, как вы его обновите.

5. Я нашел VerticalAlignment="Center" HorizontalAlignment="Center" , как заставить это работать. Мне нужно отредактировать полный ответ.