Управление содержимым SurfaceScrollViewer - PullRequest
0 голосов
/ 25 января 2012

Я углубляюсь в WPF и не могу понять некоторые вещи с помощью мультитача.
У меня есть два вопроса о SurfaceScrollViewer.

Сначала проще: у меня есть большая фотография, которую я показываю с SurfaceScrollViewer, так что я могу перемещаться, но не могу понять, как заставить контент начинаться по центру на экране.Я не могу найти какие-либо собственные свойства выравнивания в SScrollViewer.Если я даю поля содержания, это обрезает его.То же самое, если я делаю RenderTransform.Если я сделаю LayoutTransform, он, похоже, не изменится.Есть идеи?

Я также хочу дать этому контенту функцию масштабирования, находясь внутри SurfaceScrollViewer.На самом деле я пытаюсь изменить масштаб изображения с помощью эффектов SSV.Должен ли я написать манипуляции вручную или я могу исправить функции в SSV, чтобы иметь возможность масштабирования?Кажется, что SSV поглощает 2-е прикосновения в функцию панорамирования.Мне бы пришлось написать обработчик Manipulation для отправки мульти-штрихов к контенту, верно?

Мой код выглядит примерно так прямо сейчас:

<Grid x:Name="LayoutGrid"  Width="1950" Height="1118" HorizontalAlignment="Center"  >
       <s:SurfaceScrollViewer x:Name="scrollViewer"  HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" >

            <local:FloorView  x:Name="floorViewer" Width="4209" Height="1442"  >
            <local:FloorView.LayoutTransform>
                <TranslateTransform X="1000" />
            </local:FloorView.LayoutTransform>
        </local:FloorView>
       </s:SurfaceScrollViewer>
</Grid>

Любая помощь очень ценится.Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 января 2012

разобрался во второй части для увеличения внутри scrollviewer

  • обрабатывать события касания на просмотрщике прокрутки
  • отправить одно касание на просмотрщик поверхности и
  • отправить два прикосновения к содержанию
  • включить манипуляции с контентом
  • обрабатывает манипуляции с scrollviewer в качестве контейнера
  • затем используйте дельта-манипуляции, чтобы добавить ScaleTransform к содержимому
  • не забудьте обработать события касания

    private void floorViewer_TouchDown(object sender, TouchEventArgs e)  //catch touch events on floorviewer
    {
    
        Touch1ID = e.TouchDevice.Id - 16777216; ;
    
        if (Touch1ID == 0)  //if one touch present, TouchDevice.Id is 2^24, two then 2^24+1 (this might just be my machine)
        {
            floorViewer.IsManipulationEnabled = false;
            floorViewer.ReleaseTouchCapture(e.TouchDevice);
            scrollViewer.CaptureTouch(e.TouchDevice);
        }
        else {
            floorViewer.IsManipulationEnabled = true;
            foreach(TouchDevice device in scrollViewer.TouchesOver){
            scrollViewer.ReleaseTouchCapture(device);
            floorViewer.CaptureTouch(device);
            }
        }
        StartTimeout();
        e.Handled = true;
    }
    
    void scrollViewer_TouchUp(object sender,TouchEventArgs e)
    {
        clearID();
        e.Handled = true;
    }
    
    private void clearID()
    {
        Touch1ID = 0;
    }
    
    private void floorview_TouchUp(object sender, TouchEventArgs e)
    {
        clearID();
        e.Handled = true;
    }
    
    //manipulators on floorviewer when it gets touches passed to it
    private void scrollViewer_ManipulationStarting(object sender, ManipulationStartingEventArgs e)
    {
        e.ManipulationContainer = scrollViewer;
        e.Handled = true;
    }
    
    private void scrollViewer_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
    {
        double oldScale = flrScale;
        flrScale *= e.DeltaManipulation.Scale.X;
        if (flrScale < .95 | flrScale > 2) flrScale = oldScale;
        floorViewer.RenderTransform = new ScaleTransform(flrScale, flrScale, e.ManipulationOrigin.X + flrInitX, e.ManipulationOrigin.Y + flrInitY);
    
    
        e.Handled = true;
    }
    

    бах!

0 голосов
/ 26 января 2012

разобрался с первой частью:

scrollViewer.ScrollToHorizontalOffset(x);
scrollViewer.ScrollToVerticalOffset(y);

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

...