#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"
, как заставить это работать. Мне нужно отредактировать полный ответ.