2

スライダーのサムをスライダーをクリックした位置にジャンプさせる方法を知りたかったのです。つまり、ユーザーがスライダーをクリックした場所の値を取得するにはどうすればよいですか (そして、スライダーの値を設定できます)。

この質問は次のようなものです。

Move-To-Position 動作を備えたスライダー コントロール

しかし、利用可能な解決策はありません。

wp7 のスライダー コントロールにはIsMoveToPointEnabledプロパティがないため、関数 IMO を取得するにはカスタマイズが唯一の方法です。次のコードを使用します。

public class CustomSlider: Slider {
  public CustomSlider() {
    DefaultStyleKey = typeof (Slider);
  }
  public override void OnApplyTemplate() {
    base.OnApplyTemplate();
    RepeatButton rb;
    rb = base.GetTemplateChild("HorizontalTrackLargeChangeIncreaseRepeatButton") as RepeatButton;
    rb.MouseMove += new MouseEventHandler(rb_MouseMove);
    rb.Click += new RoutedEventHandler(rb_Click);
    rb = base.GetTemplateChild("HorizontalTrackLargeChangeDecreaseRepeatButton") as RepeatButton;
    rb.MouseMove += new MouseEventHandler(rb_MouseMove);
    rb.Click += new RoutedEventHandler(rb_Click);
    rb = base.GetTemplateChild("VerticalTrackLargeChangeIncreaseRepeatButton") as RepeatButton;
    rb.Click += new RoutedEventHandler(rb_Click);
    rb.MouseMove += new MouseEventHandler(rb_MouseMove);
    rb = base.GetTemplateChild("VerticalTrackLargeChangeDecreaseRepeatButton") as RepeatButton;
    rb.Click += new RoutedEventHandler(rb_Click);
    rb.MouseMove += new MouseEventHandler(rb_MouseMove);
    //rb.
  }
  Point ps;
  void rb_MouseMove(object sender, MouseEventArgs e) {
    ps = e.GetPosition(this);
  }
  public event EventHandler MyClickEvent;
  void rb_Click(object sender, RoutedEventArgs e) {
    if (MyClickEvent != null) MyClickEvent(this, new PositionEventArgs(ps));
  }
}
public class PositionEventArgs: EventArgs {
  public Point Position {
    set;
    get;
  }
  public PositionEventArgs() {}
  public PositionEventArgs(Point p) {
    Position = p;
  }
}

私は最善を尽くしますが、今までうまくいきませんでした。xaml でRepeatButtonが単独の場合でも、スライダーに埋め込まれたRepeatButtonMOUSEOVERイベントは発生しません。実際、私の実験ではCLICKイベントだけが発生します。

ほとんどのビデオ プレーヤーにこの機能があるので、自分のプレーヤーでそれを作成する方法を本当に知りたいです。

4

0 に答える 0