0

私は次のようなキャンバスにスライダーコントロールを持っています: ここに画像の説明を入力してください

キャンバスにラベル境界線に配置)を追加します。この境界線の位置をバインドして、スライダーの値がパスに沿って移動すると、境界線が正しく移動し、値がラベルで表示されるようにするにはどうすればよいですか。

誰か助けてもらえますか?どんな実用的なアイデアでもありがたいです。

4

2 に答える 2

2

ラベルを含む境界線の左マージンを管理し、それをスライダーの値にバインドする必要があります。スライダーの値を適切なマージンに変換するには、カスタムコンバーターを作成する必要があります。「LeftMargin」プロパティはないことに注意してください。スライダーの値から新しいマージンを作成し、それを境界線に渡す必要があります。

あなたの場合、コンバーターを作成し、いくつかのパラメーターを渡すことをお勧めします:上部境界マージン(直線で移動するように固定され、スライダーの位置にもバインドできます)、最小および最大スライダー値、およびマージンに合わせてスケーリングするスライダーの幅座標。些細なことではありません...

もう1つの方法は、スライダーを継承し、ラベルを組み込んだ新しいコンポーネントを作成することですが、その方法でコンバーターを回避することはできません。

于 2013-01-27T11:54:58.623 に答える
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);
}
于 2013-01-27T12:02:52.587 に答える