2017-05-01 3 views
1

내 응용 프로그램에서 translateX 조작을 사용하고 있습니다. 하지만 scrollviewer에서 사용할 때 scrollviewer는 작동을 멈추고 스크롤하지 않습니다 (수직 레일이 필요함). 해결 방법. MyXAML 코드 :UWP : 스크롤 뷰어에서 조작

<ScrollViewer>  
<Grid x:Name="MainGrid" Background="{ThemeResource AppBackgroundColor}" 
     ManipulationMode="TranslateX" ManipulationDelta="MainGrid_ManipulationDelta" ManipulationCompleted="MainGrid_ManipulationCompleted" 
     ManipulationStarted="MainGrid_ManipulationStarted" 

     > 
      <ContentControl Content="{x:Bind TheGrid,Mode=OneWay}"/> 

      <Grid.RenderTransform > 

       <TranslateTransform x:Name="myScaleTransform" /> 
      </Grid.RenderTransform> 
     </Grid> 
</ScrollViewer> 

그리고 내 C#의 코드 숨김 다음 ScrollViewer 요구를 모두 스크롤 제스처 경우

#region Manipulations 
     private void MainGrid_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) 
     { 
      if (myScaleTransform.X >= 60 && e.Delta.Translation.X > 1) 
      { 
       myScaleTransform.X = 60; 
       return; 
      } 
      if (myScaleTransform.X <= -180 && e.Delta.Translation.X < 1) 
      { 
       myScaleTransform.X = -180; 
       return; 
      } 
      myScaleTransform.X += e.Delta.Translation.X; 
      lastPostition.X += e.Delta.Translation.X; 

     } 

     private void MainGrid_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) 
     { 
      if (myScaleTransform.X <= -170) return; 
      urStoryboard.Begin(); 

     } 

     private void MainGrid_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) 
     { 
      startpoint = e.Position; 
      lastPostition = e.Position; 
     } 
    } 
    #endregion 
+1

당신은 할 수 없습니다 ... 적어도 내가 알고있는 것은 아닙니다. 'ManipulationMode'의 값을'System'이 아닌 다른 값으로 변경하면,'ScrollViewer'에서 직접 조작을하지 않게됩니다. – Laith

답변

0

나는 그것을 고정했습니다. 내 코드 :

ManipulationMode="TranslateX,System" 
0

는 불행하게도 더 좋은 해결책이 없습니다. 사용자의 동작을 처리하려면 DirectManipulation을 비활성화해야하며 스크롤을 사용하지 않도록 설정해야합니다. 이 문제에 대한 기사가 있습니다. 자세한 내용을 보려면 this을 읽어야합니다.

관련 문제