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.FormsSlider - Xamarin
スライダーは、連続した Xamarin.Forms 範囲から倍精度浮動小数点値を選択するためにユーザーが操作できる水平バーです。 この記事では、スライダークラスを使用して連続値の範囲から値を選択する方法について説明します。

これによると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をコピーしました