2014-10-30 4 views
1

간단한 WPF 사용자 정의 flipView를 만들었지 만 잘 작동하지만 화살표를 사용하지 않고 이미지를 변경하는 방법을 알지 못합니다. 이 주제 WinRT FlipView like control in WP8)에 답 :WP8 사용자 정의 flipView C#을 스 와이프 제스처로 사용합니다.

namespace PhoneApp1 
{ 
public partial class FlipView : UserControl 
{ 
    public FlipView() 
    { 
     InitializeComponent(); 
     Datasource = new List<object>(); 
     SelectedIndex = 0; 
    } 

    private IList Datasource; 
    public static readonly DependencyProperty ItemTemplateProperty = 
     DependencyProperty.Register("ItemTemplate", typeof(DataTemplate), typeof(FlipView), new PropertyMetadata(default(DataTemplate))); 

    public DataTemplate ItemTemplate 
    { 
     get { return (DataTemplate)GetValue(ItemTemplateProperty); } 
     set 
     { 
      SetValue(ItemTemplateProperty, value); 
      contentPresenter.ContentTemplate = value; 
      contentPresenter.Content = SelectedItem; 
     } 
    } 

    public static readonly DependencyProperty ItemsSourceProperty = 
     DependencyProperty.Register("ItemsSource", typeof(IList), typeof(FlipView), new PropertyMetadata(default(IList))); 

    public IList ItemsSource 
    { 
     get { return (IList)GetValue(ItemsSourceProperty); } 
     set 
     { 
      SetValue(ItemsSourceProperty, value); 
      Datasource = value; 
      SelectedIndex = SelectedIndex; 
     } 
    } 

    public static readonly DependencyProperty SelectedIndexProperty = 
     DependencyProperty.Register("SelectedIndex", typeof(int), typeof(FlipView), new PropertyMetadata(default(int))); 

    public int SelectedIndex 
    { 
     get { return (int)GetValue(SelectedIndexProperty); } 
     set 
     { 
      SetValue(SelectedIndexProperty, value); 

      rightButton.Visibility = leftButton.Visibility = Visibility.Visible; 
      if (SelectedIndex == 0) 
      { 
       leftButton.Visibility = Visibility.Collapsed; 
      } 

      if (SelectedIndex + 1 == Datasource.Count) 
      { 
       rightButton.Visibility = Visibility.Collapsed; 
       SelectedItem = Datasource[SelectedIndex]; 
      } 

      if (Datasource.Count > SelectedIndex + 1) 
      { 
       SelectedItem = Datasource[SelectedIndex]; 
      } 
     } 
    } 

    public static readonly DependencyProperty SelectedItemProperty = 
     DependencyProperty.Register("SelectedItem", typeof(object), typeof(FlipView), new PropertyMetadata(default(object))); 

    public object SelectedItem 
    { 
     get { return (object)GetValue(SelectedItemProperty); } 
     set 
     { 
      SetValue(SelectedItemProperty, value); 
      contentPresenter.Content = SelectedItem; 
     } 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     SelectedIndex--; 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     SelectedIndex++; 
    } 
} 
} 

슬쩍을 줄 수있는 가장 좋은 방법은 무엇입니까는이 사용자 정의 flipview 제스처? (덧붙여서, 나는 C# 개발의 멍청이이다.)

답변

1

NuGet을 사용하거나 웹 사이트 The Windows Phone Toolkit을 사용하여 Windows Pone Toolkit을 구하십시오. 당신은 부담없는 값으로 swipe_velocity을 변경할 수 있습니다

<Image Source="/Assets/AlignmentGrid.png"> 
    <toolkit:GestureService.GestureListener> 
     <toolkit:GestureListener Flick="OnFlick"></toolkit:GestureListener> 
    </toolkit:GestureService.GestureListener> 
</Image> 
private void OnFlick(object sender, FlickGestureEventArgs e) 
{ 
    double swipe_velocity = 1000; 

    // User flicked towards left 
    if (e.HorizontalVelocity < -swipe_velocity) 
    { 
     // Load the next image 
    } 

    // User flicked towards right 
    if (e.HorizontalVelocity > swipe_velocity) 
    { 
     // Load the previous image 
    } 
} 

:

그런 다음 당신은 당신이 그렇게 등으로 출근을 감지 할 컨트롤에 <toolkit:GestureService.GestureListener>을 사용할 수 있습니다 .

툴킷없이 당신은 당신의 제스처를 계산하는 XNA를 사용하거나 3 개 이벤트

ManipulationCompleted 
ManipulationDelta 
ManipulationStarted 

를 사용해야합니다.