2014-09-14 1 views
0

툴킷 GestureService.GestureListener를 사용하여 구현이 매우 잘 진행되고 있습니다.Windows phone 핸들 화면 조작

기본 페이지에는 LongListSelector가 있으며 상단에는 사용자가 볼 수없는 GestureService를 사용하여 슬라이드하는 슬라이딩 메뉴가 있습니다.

LongListSelector에서 스크롤하려고하면 위쪽의 메뉴가 아래로 내려옵니다. 이는 좋지 않습니다.

목록에서 스크롤하는 경우 메뉴를 슬라이드하지 않으면 메뉴가 슬라이드됩니다.

이러한 이벤트를 처리하는 방법.

감사

편집

<Grid x:Name="LayoutRoot"> 
    <toolkit:GestureService.GestureListener> 
     <toolkit:GestureListener DragDelta="GestureListener_DragDelta" 
           DragCompleted="GestureListener_DragCompleted" /> 
    </toolkit:GestureService.GestureListener> 

    <phone:Panorama Foreground="Black"> 

     <phone:PanoramaItem> 
       <Phone:LongListSelector x:Name="MyList" 
          ItemTemplate="{StaticResource MyListTemplate}"/> 
     </phone:PanoramaItem> 

     <phone:PanoramaItem> 

     </phone:PanoramaItem> 
    </phone:Panorama >  
</Grid> 

그리고 이것은 내가 전에 말했듯이 그것 정말 좋은 일하지만,

private void CloseSettings() 
    { 
     var trans = _feContainer.GetVerticalOffset().Transform; 
     trans.Animate(trans.Y, 0, TranslateTransform.YProperty, 500, 0, new CubicEase //trans.Y, 0, TranslateTransform.YProperty, 120, 0, new CubicEase 
     { 
      EasingMode = EasingMode.EaseOut 
     }); 

     _isSettingsOpen = false; 
    } 

    private void OpenSettings() 
    { 
     var trans = _feContainer.GetVerticalOffset().Transform; 
     trans.Animate(trans.Y, 400, TranslateTransform.YProperty, 200, 0, new CubicEase 
     { 
      EasingMode = EasingMode.EaseInOut 
     }); 

     _isSettingsOpen = true; 
    } 

    private void ResetLayoutRoot() 
    { 
     if (!_isSettingsOpen) 
      _feContainer.SetVerticalOffset(0.0); 
     else 
      _feContainer.SetVerticalOffset(120.0); 
    } 

    private void GestureListener_DragDelta(object sender, DragDeltaGestureEventArgs e) 
    { 
     if (e.Direction == System.Windows.Controls.Orientation.Vertical && e.VerticalChange > 0 && !_isSettingsOpen) 
     { 
      double offset = _feContainer.GetVerticalOffset().Value + e.VerticalChange; 
      if (offset > _dragDistanceToOpen) 
       this.OpenSettings(); 
      else 
       _feContainer.SetVerticalOffset(offset); 
     } 

     if (e.Direction == System.Windows.Controls.Orientation.Vertical && e.VerticalChange < 0 && _isSettingsOpen) 
     { 
      double offsetContainer = _feContainer.GetVerticalOffset().Value + e.VerticalChange; 
      if (offsetContainer < _dragDistanceToClose) 
       this.CloseSettings(); 
      else 
       _feContainer.SetVerticalOffset(offsetContainer); 
     } 
    } 
    private void GestureListener_DragCompleted(object sender, DragCompletedGestureEventArgs e) 
    { 
     if (e.Direction == System.Windows.Controls.Orientation.Vertical && e.VerticalChange > 0 && !_isSettingsOpen) 
     { 
      if (e.VerticalChange < _dragDistanceToOpen) 
       this.ResetLayoutRoot(); 
      else 
       this.OpenSettings(); 
     } 

     if (e.Direction == System.Windows.Controls.Orientation.Vertical && e.HorizontalChange < 0    && _isSettingsOpen) 
     { 
      if (e.VerticalChange > _dragDistanceNegative) 
       this.ResetLayoutRoot(); 
      else 
       this.CloseSettings(); 
     } 
    } 

변수는 클래스에 선언 내 C# 코드입니다 때 내 longListSelector에서 스크롤, 메뉴 아래로 슬라이드, 나는 그걸 원하지 않아!

+0

핫존이있는 곳을 확인하려면 더 많은 코드가 필요할 것입니다. 그 대답은 특정 조건이 충족 될 때'IsHitTestVisible'을 false로 설정하는 것만큼이나 쉽습니다. –

+0

@ChubosaurusSoftware가 제 편집을 확인합니다. –

답변

0

이것은 부모가 호출 호출을받지 못하는 경우에만 발생합니다. 내가 제안한 것은 IsHitTestVisible = False을 메뉴에 추가하여 작동 여부를 확인하는 것입니다.