2

プロパティが依存関係プロパティに関連付けられているスライダーがあります。ユーザーが GUI を介して値を変更したかどうかを知る必要があります。残念ながら、このスライダーの値はコードを介して変更されることが多く、それが発生すると「Value_Changed」イベントが発生します。

私はこれを回避する2つの方法を知っています:

  1. ブール値を作成し、値を変更する前にコードで毎回 true に変更し、後で false に変更してから、Value_Changed イベントでこのブール値をチェックします。
  2. keypress、click、dragstop イベントをスライダーに接続します。

ユーザーが UI を介して値を変更したかどうかを知るためのより良い方法があるかどうか疑問に思っています。

4

3 に答える 3

2

私はこのようにします:

public bool PositionModifiedByUser
{ /* implement IPropertyChanged if need to bind to this property */ }

// use this property from code
public double Position
{
    get { return m_position ; }
    set { SetPropertyValue ("PositionUI", ref m_position, value) ;
          PositionModifiedByUser = false ; }
}

// bind to this property from the UI
public double PositionUI
{
    get { return m_position ; }
    set { if (SetPropertyValue ("PositionUI", ref m_position, value))
          PositionModifiedByUser = true ; }
}

SetPropertyValue は、等しいかどうかをチェックし、値が実際に変更された場合にプロパティ変更通知を発生させるヘルパーです。

于 2013-03-18T13:09:48.637 に答える
0

質問が重複している可能性があります。素早い回答:

<Slider Thumb.DragCompleted="MySlider_DragCompleted" />

この投稿も参照してください

于 2013-03-18T12:54:52.807 に答える
0

しかし、アントンからの答えは+1の方が良いです

[BindableAttribute(true)]
public double Slider1Value
{
    get { return slider1Value; }
    set
    {
        // only bind to the UI so any call to here came from the UI
        if (slider1Value == value) return;
        // do what you were going to do in value changed here
        slider1Value = value;
    }
}

private void clickHalf(object sender, RoutedEventArgs e)
{
    // manipulate the private varible so set is not called
    slider1Value = slider1Value / 2;
    NotifyPropertyChanged("Slider1Value");
}
于 2013-03-18T14:03:45.890 に答える