XAMLには<Slider />
があります。 ValueChangedイベントがあります。このイベントは、値が変更されるたびに発生します。私は値の変更が終わったときを検出する必要があります。 LostFocus、PointerReleasedは正しいイベントではありません。これをどのように検出できますか?XAMLスライダが完了したときはどうすれば検出できますか?
答えて
あなたは新しいクラスを作成して、スライダーを継承することができます。そこからThumbコントロール&を探して、必要なイベントを聞くことができます。
このような何か作業をする必要があります:
public class SliderValueChangeCompletedEventArgs : RoutedEventArgs
{
private readonly double _value;
public double Value { get { return _value; } }
public SliderValueChangeCompletedEventArgs(double value)
{
_value = value;
}
}
public delegate void SlideValueChangeCompletedEventHandler(object sender, SliderValueChangeCompletedEventArgs args);
public class ExtendedSlider : Slider
{
public event SlideValueChangeCompletedEventHandler ValueChangeCompleted;
private bool _dragging = false;
protected void OnValueChangeCompleted(double value)
{
if (ValueChangeCompleted != null)
{
ValueChangeCompleted(this, new SliderValueChangeCompletedEventArgs(value));
}
}
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
var thumb = base.GetTemplateChild("HorizontalThumb") as Thumb;
if (thumb != null)
{
thumb.DragStarted += ThumbOnDragStarted;
thumb.DragCompleted += ThumbOnDragCompleted;
}
thumb = base.GetTemplateChild("VerticalThumb") as Thumb;
if (thumb != null)
{
thumb.DragStarted += ThumbOnDragStarted;
thumb.DragCompleted += ThumbOnDragCompleted;
}
}
private void ThumbOnDragCompleted(object sender, DragCompletedEventArgs e)
{
_dragging = false;
OnValueChangeCompleted(this.Value);
}
private void ThumbOnDragStarted(object sender, DragStartedEventArgs e)
{
_dragging = true;
}
protected override void OnValueChanged(double oldValue, double newValue)
{
base.OnValueChanged(oldValue, newValue);
if (!_dragging)
{
OnValueChangeCompleted(newValue);
}
}
}
Windows8/WinRTのSlider
を使用して同様の問題が発生しました。
私の問題は次のとおりです。私はValueChanged
イベントに反応し、各トリガーの後に長期間持続する操作(ファイルに非同期で書き込む)を行っていました。したがって、同時編集例外が発生します。これを避けるために、私はDispatcherTimer
を使用しました。ユーザーは、スライダーをドラッグし、維持したまま停止した場合、あなたが直接最終的な値が何であるかを検出することはできませんが、私の場合は2回の更新(例えば間に長い休止があるまであなたは、少なくとも操作を遅らせることができ
//Class member
private DispatcherTimer myDispatcherTimer = null;
private void OnSliderValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
//I update my UI right away
...
//If the dispatcher is already created, stop it
if (myDispatcherTimer!= null)
myDispatcherTimer.Stop();
//Overwrite the DispatcherTimer and thus reset the countdown
myDispatcherTimer= new DispatcherTimer();
myDispatcherTimer.Tick += (sender, o) => DoSomethingAsync();
myDispatcherTimer.Interval = new TimeSpan(0,0,2);
myDispatcherTimer.Start();
}
private async void DoSomethingAsync()
{
await DoThatLongSaveOperation();
}
2秒間ドラッグすると、保存操作が実行されます)。
Ack!タイマー。 2秒?なぜ1ではない、なぜ3ではない?私は明白な出来事を好むだろうと思う。もし彼らのシステムが遅いのであれば?彼らのシステムが高速ならどうなるでしょうか?私の言っていることが分かるよね。 –
ブール値のペアisValueChangedと(可能であればポインタ の操作なしで値を変更できる)isPressedを使用できます。
private void Slider_ValueChanged(object s, RangeBaseValueChangedEventArgs e) {
if (!isPressed) {
AcceptChanges();
} else {
isValueChanged = true;
}
}
初期化コード:
Window.Current.CoreWindow.PointerPressed += (e, a) => { isPressed = true; };
Window.Current.CoreWindow.PointerReleased += (e, a) => {
isPressed = false;
if (isValueChanged) AcceptChanges();
};
キーボードがサポートされているかどうかわかりません。 –
XAML、WinRTの、Windows8.1とUWP:
PointerCaptureLostイベントは/マウスのために働くために
からkeyupイベントに触れる必要がありますがキーボード
- 1. ASP.NETでファイルのダウンロードが完了したときはどうすれば検出できますか?
- 2. 印刷操作が完了したら、どうすれば検出できますか?
- 3. Clang - ヘッダーファイルが完了したときに検出します。
- 4. スクロールUIDatePickerが完了したときはどうすれば決定できますか?
- 5. コマンドがttyの出力を完了したことをどのように検出できますか?
- 6. どうすればgit commitを完了できますか?
- 7. ゾーンがすべてのタスクが完了したときに検出します
- 8. AngularJSは、$ compile HTML文字列が完了したときに検出します。
- 9. iOS:アニメーションが終了したときを検出するにはどうすればよいですか?
- 10. iOS Safariがネイティブプレーヤーで「完了」をクリックしたときに検出します
- 11. UITableViewで、行のscrollRectToVisibleが完了したときはどうすればわかりますか?
- 12. innerHTMLが完了したときの検出方法
- 13. WebViewでリダイレクトが完了したときを検出する方法は?
- 14. generateCGImagesAsynchronouslyが完全に終了したときは、どうすればわかりますか?
- 15. ディレクトリがinotifyでマウントされたときは、どうすれば検出できますか?
- 16. シフトキーがCで押されたときはどうすれば検出できますか?
- 17. XMLHttpRequestが完了したときに関数を実行するにはどうすればよいですか?
- 18. htmlがレンダリングを完了したかどうかを検出する方法は?
- 19. スレッドメソッドが完了したかどうかを検出するにはどうにかします
- 20. Python OpenCvビデオの再生が終了したらどうすれば検出できますか?
- 21. アプリケーションが最小化されたときはどうすれば検出できますか?
- 22. WebViewがIonicでindex.htmlから外れたとき、どうすれば検出できますか?
- 23. Android foursquare:チェックインが完了したかどうかはどうやって知ることができますか?
- 24. ページがフルスクリーンで終了するときを検出するにはどうすればよいですか?
- 25. ウィンドウが完全に開始したときにサービスがどのように検出できますか?
- 26. デバイスが新しいIPを取得したとき、どうすれば検出できますか?
- 27. セロリタスクとすべてのサブタスクが完了したときの検出
- 28. バックスペースキーを長押ししたときはどうすれば検出できますか?
- 29. <select>がアンドロイドwebviewでクリックされたとき、どうすれば検出できますか?
- 30. リアクションナビゲーション - 遷移が完了したかどうかを検出する方法
タイマーがValueChangedに接続されている可能性がありますか? –
あなたが苦労しているのは、このイベントを正確に受信したいときを定義することです。私はあなたがそれを理解すれば、あなたはおそらくそれを送る方法を理解するだろうと思います。離散値オプションを持つスライダを使用すると、より明瞭になるでしょうか? – mydogisbox
この問題を解決しましたか? – Carlo