2017-12-29 62 views
0

저는 확대/축소 및 이동이 가능한 스크롤바에 Canvas가 포함되어 있습니다. 그러나 사용자 입력 요소 (텍스트 상자, 이미지 등)를 핀치 기능으로 크기를 조정할 수 있도록하려고합니다.UWP Canvas에서 ScrollViewer를 사용하여 UI 요소 크기 조정

<Grid> 
    <RelativePanel> 
     <Button ... /> 
     <Button ... /> 
     <Button /> 

     <ScrollViewer 
     VerticalScrollMode="Auto" 
     HorizontalScrollMode="Auto" 
     HorizontalScrollBarVisibility="Visible" 
     VerticalScrollBarVisibility="Visible" 
     ZoomMode="Enabled" 
     MinZoomFactor="1" 
     MaxZoomFactor="5" 
     HorizontalAlignment="Left" 
     VerticalAlignment="Top" 
     RelativePanel.Below="AddTextButton"> 

      <Canvas Name="parentCanvas" Height="10000" Width="10000" > 

       <InkCanvas Name="inkCanvas" Height="10000" Width="10000" 
         Visibility="Visible" /> 

      </Canvas> 

     </ScrollViewer> 
    </RelativePanel> 
</Grid> 
나는 또한 조작 이벤트를 텍스트 상자를 추가하고 처리하기 위해이 C# 코드를

은 (드래그/크기 조정) :

public void AddTextButton_Click(object sender, RoutedEventArgs e) 
    { 
     TextBox MyTextBox = new TextBox(); 
     MyTextBox.Background = new SolidColorBrush(Colors.White); 

     MyTextBox.PlaceholderText = "Text"; 
     MyTextBox.Width = 250; 
     MyTextBox.Height = 100; 

     ManipulationMode = ManipulationModes.All; 
     MyTextBox.RenderTransform = textBoxTransforms; 
     AddHandler(ManipulationDeltaEvent, new ManipulationDeltaEventHandler(TextBox_ManipulationDelta), true); 
     parentCanvas.Children.Add(MyTextBox);   
    } 

    void TextBox_ManipulationDelta(object sender, 
     ManipulationDeltaRoutedEventArgs e) 
    { 
     // Move the TextBox. 

     dragTextBox.X += e.Delta.Translation.X; 
     dragTextBox.Y += e.Delta.Translation.Y; 

     resizeTextBox.ScaleX *= e.Delta.Scale; 
     resizeTextBox.ScaleY *= e.Delta.Scale; 
    } 

이 C# 코드 다음은 인터페이스의 기초에 대한 내 XAML 코드는 캔버스가 스크롤 뷰어에 포함되어 있지 않을 때 작동합니다. scrollviewer에서 크기 조정 (터치/집기 기능 포함)하는 방법에 대한 제안 사항이 있습니까?

감사합니다.

답변

0

ScrollViewer에서 TextBox 조작에 대한 좋은 해결책은 없습니다.

는 @ 롭 Where did all my gestures go?에서

에서 ScrollViewer가 스크롤을 실행하기 위해 포인터 취급을 인수 블로그를 참조하십시오. 에서 ScrollViewer가 담당 일단 앱이 모두 (스크롤 제스처 필요가있는 경우

는 불행하게도 더 좋은 해결책이 없다 ... 응용 프로그램이 그들

에서 자신의 기회를하지 않고 포인터와 조작 모든 이벤트를 처리 예를 들어 스크롤링에 대비해 CrossSlides를 감지 할 수 있습니다. 이 경우 어디에서나 포인터 메시지를 가져 오는 유일한 옵션은 모든 곳에서 직접 조작을 사용하지 않도록 설정하는 것이지만 스크롤을 사용하지 않도록 설정할 수도 있습니다. 다시 돌아 오려면 앱에서 스크롤 제스처 자체를 감지 한 다음 ScrollToHorizontalOffset 또는 ScrollToVerticalOffset을 사용하여 ScrollViewer를 새 위치로 이동하거나 SelectedIndex를 업데이트해야합니다. 이것은 까다 롭고 ScrollViewer가하는 일보다 눈에 띄게 느립니다. 가능하다면 피해야합니다.