2011-12-31 47 views
0

我有一個滑塊,我在內部更新值。而且,用戶輸入被接受,以改變內部參數。如何知道誰在WPF中引發了路由事件?

問題是:我怎麼能知道誰提出了事件,用戶或我更改slider.value的類?

在我而言,這是處理程序:

private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
{ 
     var slider = sender as Slider; 
     if (slider == null) return; 

     var col = this.SelectedColor; 
     switch ((string)slider.Tag) 
     { 
      case "Hue": this.SetHue(ValueHue.Value); break; 
      case "Sat": this.SetSatBri(ValueSat.Value, CurrentBri); break; 
      case "Bri": this.SetSatBri(CurrentSat, ValueBri.Value); break; 
      case "R": this.SetColor(Color.FromRgb(Convert.ToByte(ValueR.Value), col.G, col.B)); break; 
      case "G": this.SetColor(Color.FromRgb(col.R, Convert.ToByte(ValueG.Value), col.B)); break; 
      case "B": this.SetColor(Color.FromRgb(col.R, col.G, Convert.ToByte(ValueB.Value))); break; 
     } 
} 

如果事件不是由用戶輸入所提出的功能不能正常工作。那麼我怎麼能找到這個呢?

+0

您是否嘗試過'e.OriginalSource' – mihajlv 2011-12-31 22:42:38

回答

1

您無法確定事件是如何引發的,因此您將不得不採取不同的方法。對於這個問題最常見的解決方案可能是設置一個布爾字段,指示應用程序對特定的狀態變化作出反應。例如,當你在內部更新值:

private bool _settingValue = false; 

private void SetValueInternal() 
{ 
    _settingValue = true; 
    mySlider.Value = newValue; 
    _settingValue = false; 
} 

然後,您可以更改基礎上,_settingValue變量的狀態,你的問題的邏輯。

+0

謝謝,這就是我正在考慮的...這不是一個漂亮的解決方案,而且我認爲可能有更好的方法......但看起來像這樣成爲我的方法。 – Tibi 2012-01-01 12:10:42