127

古い System.Windows.Forms.TrackBar のように動作する WPF スライダーが必要になることがよくあります。つまり、X から Y に移動するが、ユーザーが個別の整数位置でのみ移動できるスライダーが必要です。

Slider の Value プロパティが double であるため、WPF でこれを行うにはどうすればよいですか?

4

4 に答える 4

185

簡単な答えは、IsSnapToTickEnabledおよびTickFrequencyプロパティを利用することです。つまり、目盛りへのスナップをオンにし、目盛りの頻度を 1 に設定します。

または、言い換えると...ティックを利用します...しかし、スナップしているティックを必ずしも表示する必要はありません。

次の xaml を確認してください。

<Slider
    Orientation="Vertical"
    Height="200"
    Minimum="0"
    Maximum="10"
    Value="0"
    IsSnapToTickEnabled="True"
    TickFrequency="1"
/>
于 2008-10-06T02:10:02.823 に答える
106

正しい方法で目盛りを設定すると、IsSnapToTickEnabledを使用できます。これは私にとってはかなりうまくいきました。詳細については、 MSDNを参照してください。

于 2008-10-06T02:10:51.293 に答える
48

特定の位置にスナップしたい場合は、次のTicksプロパティも使用できます。

<Slider Minimum="1" Maximum="500" IsSnapToTickEnabled="True" Ticks="1,100,200,350,500" />
于 2011-08-14T15:04:19.130 に答える
12

スナップ トリックは便利ですが、有効なティックのサブセットのみを表示する場合など、制限があります。整数にバインドするか、新しい値を丸めるという 2 つの方法で成功しました。組み合わせた例を次に示します。

public int MyProperty { get; set; }

private void slider1_ValueChanged(object sender,
    RoutedPropertyChangedEventArgs<double> e)
{
    (sender as Slider).Value = Math.Round(e.NewValue, 0);
}

<Slider
    Name="slider1"
    TickPlacement="TopLeft"
    AutoToolTipPlacement="BottomRight"
    ValueChanged="slider1_ValueChanged"
    Value="{Binding MyProperty}"
    Minimum="0" Maximum="100" SmallChange="1" LargeChange="10"
    Ticks="0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100"/>

どちらのパフォーマンスがスナップ トリックと比較されるかはわかりませんが、問題はありませんでした*。

*スライダーの値をテキスト フィールドのタイプにバインドすると、マウスを使用するとテキスト フィールドに小数が表示されることがあります。同時に int にもバインドすると、空の文字列によって変換例外がスローされ、UI が一時的に停止します。これらの問題は、解決策を探すほど深刻ではありませんでした。

于 2012-12-19T23:36:49.847 に答える