Xamarin.Forms-Slider

Xamarin.FormsのSliderについてちょっと気になった点。

Sliderは、以下のようにつまみがあり、Doubleの数値のある区間から1つの値が設定可能なGUI部品。

Android版

こちらのバージョン、バーが白だったので、ちょっと見づらい。

UWP版

動作確認をしていたところ、以下のソースの場合、スライダーをいくら動かしても、小数点以下2桁目0のままで、小数点以下2桁目の値を調整することはできなかった。

Slider slider = new Slider
{
    Minimum = 0,
    Maximum = 100,
    VerticalOptions = LayoutOptions.CenterAndExpand,
    Margin = new Thickness(10, 0)
};
slider.ValueChanged += OnSliderValueChanged;

void OnSliderValueChanged(object sender, ValueChangedEventArgs e)
{
    label.Text = String.Format("Slider value is {0:F2}", e.NewValue);
}

一応、Minimum, Maximumに0~100を指定した場合、ステップ値(StepperでいうとIncrement相当)は0.1となった。そのため、OnSliderValueChangedで受け取った値を小数点以下2桁まで表示しようとしても、2桁目は0のまま。0~10を指定した場合は0.01となった。

結果としてSliderがとりうる値はMinimumからMaximumを1000分割したステップでの値になっていることが分かった。

ちなみにSliderでは最大・最少の設定は可能だがステップ値の設定するプロパティはない。

この分割数の疑問について調べてみたところ、以下のような記載が見つかった。

Xamarin.Forms スライダー - Xamarin
Xamarin.Forms スライダーは、連続した範囲から double 値を選択するためにユーザーが操作できる水平バーです。 この記事では、スライダー クラスを使用して、連続する値の範囲から値を選択する方法について説明します。

これによるとOSにより動作が違うと書かれており、Android版ではSeekBarを使いその分割数属性を1000に設定しているためだとのこと。UWP版はもう少し細かい記述があったのだが、実際に動かしてみるとAndroid版と同じ1000分割での動作だった。
iOS版については確かめられなかったが、AndroidとUWPの動作を合わせていることを見る限りiOSも同じ1000分割なのだろう。

一応上記リンクの先には、Step数を設定可能なStepSliderというカスタム実装についてのPDFのリンクもあったし、Googleで検索してもStep値を設定可能なSliderはないかという質問がそれなりにあったので、疑問に思った人もいたのだろう。

ただ、Minimum, Maximumの範囲が大きくステップ値が小さい値を選択させる場合、SliderではなくEntryか、入力後上下細かい数値調整が必要ならEntry+Stepperで対応したほうがいいのかもしれない。

コメント

タイトルとURLをコピーしました