2016-01-31 5 views
-3

У меня есть трек-бар, связанный с полем для картинок, где я рисую изображение на основе выбранного коэффициента масштабирования. Диапазон составляет от 1% до 1000%, поэтому чем ниже вы его перемещаете, тем быстрее он уменьшает масштаб.Логарифмическая дорожка для значений масштабирования от 1% до 1000%

Ожидается, но не желателен. Есть ли способ масштабирования интерпретировать значения ползунка, так что увеличение становится более естественным для пользователя, особенно в диапазоне < 50%.

+1

_ «Есть ли способ масштабирования интерпретировать значения ползунка» _ - Конечно. всегда есть выход". Что вы пробовали? Возможно, вам будет полезно рассмотреть возможность использования «IValueConverter» в вашей привязке. Или вы не можете. Это невозможно понять, поскольку здесь вы не указали никакого контекста. Хороший вопрос будет включать хороший [mcve], а также подробное объяснение того, что делает этот код и как это отличается от того, что вы хотите. –

+2

Возможно, вы зададите этот вопрос на ux.stackexchange, так как вы действительно не просите, как программировать что-то, но * что * вы должны программировать. Это вопрос UX. Я скептически отношусь к тому, что слайдер - это правильный инструмент (вообще)! – ErikE

+0

@ErikE: Спасибо. Я не думал об этом. Математический вопрос все еще стоит. Из любопытства. –

ответ

0

Это легко сделать:

myTrackBar.Minimum = 0; 
myTrackBar.Maximim = 3000; 

... 

public double RealValue 
{ 
    get 
     { 
      var trackPos = myTrackBar.Value; 

      return Math.Pow(10.0, trackPos/1000.0); 
     } 

    set 
     { 
      var logValue = Math.Log10(value) * 1000; 

      myTrackBar.Value = (int) logValue; 
     } 
} 

Чтобы понять, как это работает, рассмотрим диапазон - от 1 до 1000, или выражается в степенях 10 является 1E0 до 1E3. Следовательно, если мы дадим полосе дорожек диапазон от 0 до 3 и прибавим 10 к значению, мы получим хороший экспоненциальный набор значений, точно так же, как вы хотите.

Но если мы установим диапазон 0..3, мы можем выбрать только 4 разных значения: 0, 1, 2, 3, которые будут переведены на 1, 10, 100 и 100 соответственно.

Чтобы дать нам значения между ними, мы просто умножаем диапазон на тысячу, давая нам 3001 различное значение, которое может отслеживать полоса дорожек, а затем разделите значение трекбара на тысячу.