UWP изменить вид холста на основе (x, y) координат холста? - PullRequest
1 голос
/ 05 мая 2020

У меня Canvas имеет ширину = 200000, высоту = 200000. Мой размер экрана, высота и ширина 700 и 1400 соответственно. Если я отображаю холст, он не будет отображать весь холст. Поэтому я использовал событие pointerWheelChanged для холста и я должен был вычислить, сколько прокрутки было прокручено при прокрутке колесика мыши. т. е. новые (x, y) координаты холста. Тем не менее, это работало нормально. Но я не знаю, как показать холст с моими новыми координатами.

Canvas c=new Canvas();
Image img1=new Image();
Image img2=new Image();
c.Children.Add(img1);
c.Children.Add(img2);
Canvas.SetLeft(img1,100);
Canvas.SetTop(img1,200);
Canvas.SetLeft(img2,2000);
Canvas.SetTop(img2,1500);

В моем холсте есть два изображения, одно в (100,200), а другое в (2000,1500). Если высота и ширина экрана 700 и 1400 соответственно. Когда я запускаю его, он показывает только первое изображение на экране, потому что второе изображение было в каком-то другом месте. т.е. вне экрана (оно было скрыто). Как я могу показать второе изображение на основе данных, вычисленных из события mousewheelchanged. Я рассчитал его, но я не 'Не знаю, как показать холст из вычисленного значения ??

В PointerWheelChangedEvent я добавил его,

Canvas layout = sender as Canvas;
int wheelDelta = e.GetCurrentPoint(layout).Properties.MouseWheelDelta;
Boolean isHorizontalSwipe = 
e.GetCurrentPoint(layout).Properties.IsHorizontalMouseWheel;
Point scrollPoint = e.GetCurrentPoint(layout).Position;

WheelDelta добавляется или вычитается f rom текущий холст Точка на основе горизонтального или вертикального смахивания.

что я пытаюсь сделать? enter image description here

1 Ответ

1 голос
/ 06 мая 2020

Вы можете назначить новый перевод для холста, чтобы обновить положение холста на основе wheelDelta. Например:

private void Canvas_PointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
    Canvas layout = sender as Canvas;
    int wheelDelta = e.GetCurrentPoint(layout).Properties.MouseWheelDelta;
    Boolean isHorizontalSwipe =
    e.GetCurrentPoint(layout).Properties.IsHorizontalMouseWheel;

    if (horizontal swipe) 
    {
        layout.Translation = new Vector3(layout.Translation.X + wheelDelta, layout.Translation.Y, layout.Translation.Z);
    }
    else
    {
        layout.Translation = new Vector3(layout.Translation.X, layout.Translation.Y + wheelDelta, layout.Translation.Z);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...