どのようにWPFスライダーを離散整数位置にのみスナップさせるのですか?

StackOverflow https://stackoverflow.com/questions/173009

  •  05-07-2019
  •  | 
  •  

質問

ほとんどの場合、古いSystem.Windows.Forms.TrackBarのように動作するWPFスライダーが必要です。つまり、XからYに移動するが、ユーザーはそれを離散整数位置でのみ移動できるスライダーが必要です。

スライダーのValueプロパティが2倍であるため、WPFでこれを行うにはどうすればよいですか?

役に立ちましたか?

解決

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

他のヒント

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

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

次のxamlをチェックアウトします。

<Slider
    Orientation="Vertical"
    Height="200"
    Minimum="0"
    Maximum="10"
    Value="0"
    IsSnapToTickEnabled="True"
    TickFrequency="1"
/>

特定の位置にスナップする場合は、 Ticks プロパティを使用することもできます。

<Slider Minimum="1" Maximum="500" IsSnapToTickEnabled="True" Ticks="1,100,200,350,500" />

スナップトリックは便利ですが、制限があります。たとえば、有効なティックのサブセットのみを表示する場合です。整数にバインドするか、新しい値を丸めるという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が一時的に停止します。これらの問題は、私が解決策を探すほど深刻ではありませんでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top