Как сделать слайдер wpf

Обновлено: 14.05.2024

Я в настоящее время сделать MP3-плеер в WPF, и я хочу сделать слайдер, который позволит пользователю искать определенное положение в mp3, сдвинув ползунок влево или вправо.

Я попытался с помощью `ValueChanged событие, но это срабатывает каждый раз, когда он'ы значение меняется, так что если вы перетащите его через событие будет срабатывать несколько раз, я хочу, чтобы событие, чтобы стрелять только, когда пользователь закончил перетаскивание ползунка, а затем получить новое значение.

Как я могу добиться этого?

[Обновление]

Я нашел этот пост на MSDN, которая в основном обсуждается то же самое, и они подошли с двух-то "решения", У; либо подклассы ползунок или вызов DispatcherTimer в `ValueChanged событие, которое вызывает действие через промежуток времени.

Можете ли вы придумать что-нибудь лучше, чем два упомянутых выше?

Кроме того, используя палец.Событие DragCompleted вы также можете использовать как ValueChanged и большого пальца.DragStarted , таким образом, вы не потеряете функциональность, когда пользователь изменяет значение, нажимая клавиши со стрелками или нажатием на ползунок.

Вы можете использовать большой палец'с 'DragCompleted' события для этого. К сожалению, это только уволили, когда перетаскивание, так что вы'll необходимо, чтобы обрабатывать другие клики и нажатия клавиш по отдельности. Если вы только хотите ее разрешить, можно отключить эти средства перемещая ползунок, установив LargeChange 0, а фокус в false.

работает для меня.

Значение является значением после событий mousup, либо на клики на стороне или после перетаскивания ручки.

Поскольку события mouseup не'т туннель вниз (она обработана, прежде чем он может), вы должны использовать PreviewMouseUp.

Еще в MVVM-удобное решение (я не был счастлив с ответами)

Это'с задержкой (от 1000 мс в данном примере) операции. Новая задача создается на каждое изменение сделано ползунок (либо с помощью мыши или клавиатуры). Перед началом задания сигналов (используя монитор.PulseAll`, возможно, даже монитор.Пульс будет достаточно) на работу уже задачи (если таковые имеются), чтобы остановить. Вообще-то часть только происходит, когда монитор.Подожди, Дон'т получить сигнал в течение времени ожидания.

Почему такое решение? Я Дон'т, как нерестовое поведение или имеющие излишнюю обработку событий в представлении. Весь код находится в одном месте, без дополнительных мероприятий, `модель представления имеет выбор либо реагировать на каждое изменение значения или в конце операции пользователя (который добавляет тонны гибкости, особенно когда через силу).

Слишком часто мне нужен слайдер WPF, который ведет себя как старый System.Windows.Forms.TrackBar. То есть мне нужен ползунок, который перемещается от X к Y, но позволяет пользователю перемещать его только в дискретных целочисленных позициях.

Как это сделать в WPF, если свойство Value на слайдере двойное?

Ответы 4

Ответ прост: вы пользуетесь свойствами IsSnapToTickEnabled и TickFrequency. То есть включите привязку к тикам и установите частоту тиков равной 1.

Или, другими словами . используйте тики . но вам необязательно показывать тики, к которым вы привязываетесь.

Обратите внимание на следующий фрагмент xaml:

Этот ответ должен быть принятым. Работает как шарм. Спасибо

Спасибо @Ashbay . в то время я хотел отдать должное кому-то другому . вместо того, чтобы просто пометить свой ответ как принятый.

Если вы правильно выставили галочки, вы можете использовать IsSnapToTickEnabled. У меня это сработало. Подробнее см. MSDN.

Для тех, кто хочет привязаться к позициям специфический, вы также можете использовать свойство Ticks :

Уловка с привязкой удобна, но имеет ограничения, например, если вы хотите показать только подмножество действительных тиков. Я добился успеха с двумя альтернативами: либо привязать к целому числу, либо округлить новое значение. Вот комбинированный пример:

Я понятия не имею, как производительность любого из них сравнивается с трюком с оснасткой, но у меня не было никаких проблем *.

* Если вы также привязываете значение ползунка к типу текстового поля, вы будете испытывать, что время от времени при использовании мыши в текстовом поле будут отображаться десятичные знаки. Если вы также привяжетесь к int в то же время, пустая строка вызовет исключение преобразования, которое ненадолго задержит пользовательский интерфейс. Эти проблемы не были достаточно серьезными, чтобы я мог искать решения.

Так позволяет ли это пользователю иметь другие значения на ползунке? Или он по-прежнему позволяет выбирать только значение тиков. Странный вопрос . надеюсь, вы понимаете, о чем я спрашиваю.

@JLott: вы по-прежнему можете привязаться только к значениям Ticks (0, 10, 20, . ), но все значения между ними (1, 2, . ) действительны и могут быть выбраны, например, клавиши со стрелками.

Слишком часто мне нужен слайдер WPF, который ведет себя как старый System.Windows.Forms.TrackBar. То есть мне нужен ползунок, который перемещается от X к Y, но позволяет пользователю перемещать его только в дискретных целочисленных позициях.

Как это сделать в WPF, если свойство Value на слайдере двойное?

4 ответы

Если вы правильно установите отметки, вы можете использовать Исснаптотикенаблед. У меня это сработало. Видеть MSDN для получения информации.

ответ дан 06 окт '08, 03:10

Простой ответ заключается в том, что вы пользуетесь преимуществом Исснаптотикенаблед и TickFrequency характеристики. То есть включите привязку к тикам и установите частоту тиков равной 1.

Или, другими словами . воспользуйтесь преимуществами тиков . но вам необязательно показывать тики, к которым вы привязываетесь.

Обратите внимание на следующий фрагмент xaml:

Этот ответ должен быть принятым. Работает как шарм. Спасибо - Ашбай

Спасибо @Ashbay . в то время я хотел отдать должное кому-то другому . вместо того, чтобы просто пометить свой ответ как принятый. - графики

Для тех, кто хочет привязаться к конкретный позиции, вы также можете использовать Ticks имущество:

ответ дан 14 авг.

Уловка с привязкой удобна, но имеет ограничения, например, если вы хотите показать только подмножество допустимых отметок. Я добился успеха с двумя альтернативами: либо привязать к целому числу, либо округлить новое значение. Вот комбинированный пример:

Я понятия не имею, как производительность любого из них сравнивается с трюком с оснасткой, но у меня не было никаких проблем *.

*Если ты Также привяжите значение ползунка к типу текстового поля, вы увидите, что время от времени при использовании мыши в текстовом поле будут отображаться десятичные знаки. Если вы также привяжетесь к int в то же время, пустая строка вызовет исключение преобразования, которое ненадолго задержит пользовательский интерфейс. Эти проблемы не были достаточно серьезными, чтобы я мог искать решения.

Так позволяет ли это пользователю иметь другие значения на ползунке? Или он по-прежнему позволяет выбирать только значение тиков. Странный вопрос . надеюсь, вы понимаете, о чем я спрашиваю. - Джей Лотт

@JLott: Вы все еще можете привязаться к Ticks значения (0, 10, 20, . ), но все значения между ними (1, 2, . ) действительны и могут быть выбраны, например, клавишами со стрелками. - Мкьельдсен

Ой, аккуратно. Я этого не осознавал . Спасибо! - Джей Лотт

Это работает для Silverlight, где нет IsSnapToTickEnabled имущество. - оммегамен

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками wpf controls slider or задайте свой вопрос.

Мне было интересно, как создать свиток, который выглядит примерно так:

введите описание изображения здесь

Я действительно заинтересован в том, чтобы иметь возможность создать такой, и не уверен, что это за элемент и как его реализовать. Я искал, но не могу найти какую-либо информацию . Так что любой учебник, руководство или подсказка будут по достоинству оценены.

2 ответа

См. учебник Чарльза Петцольда. Он дает хорошее представление о том, как создавать изогнутые ползунки и полосы прокрутки.

Похожие вопросы

Популярные теги

Читайте также: