私は次のようなキャンバスにスライダーコントロールを持っています:
キャンバスにラベル(境界線に配置)を追加します。この境界線の位置をバインドして、スライダーの値がパスに沿って移動すると、境界線が正しく移動し、値がラベルで表示されるようにするにはどうすればよいですか。
誰か助けてもらえますか?どんな実用的なアイデアでもありがたいです。
ラベルを含む境界線の左マージンを管理し、それをスライダーの値にバインドする必要があります。スライダーの値を適切なマージンに変換するには、カスタムコンバーターを作成する必要があります。「LeftMargin」プロパティはないことに注意してください。スライダーの値から新しいマージンを作成し、それを境界線に渡す必要があります。
あなたの場合、コンバーターを作成し、いくつかのパラメーターを渡すことをお勧めします:上部境界マージン(直線で移動するように固定され、スライダーの位置にもバインドできます)、最小および最大スライダー値、およびマージンに合わせてスケーリングするスライダーの幅座標。些細なことではありません...
もう1つの方法は、スライダーを継承し、ラベルを組み込んだ新しいコンポーネントを作成することですが、その方法でコンバーターを回避することはできません。
私はC#コーディングを使用してそれを行いました。しかし、それはより良い解決策かもしれませんが、それは私にとってはうまくいきます。スライダーのValueChanged
場合、私はこれらのコードを書きます。
private void year_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (this.yearInfo == null)
{
return;
}
Point position = Mouse.GetPosition(this.mapView); //mapView is the name of my canvas
this.yearInfo.Margin =
new Thickness(0, 0, position.X - this.yearInfo.ActualWidth / 2.0, 45);
}