我怎么知道谁在WPF中引发了路由事件?

时间:2011-12-31 15:54:19

标签: wpf events slider user-input

我有一个滑块,我正在内部更新该值。但是,也接受用户输入,以更改内部参数。

问题是:我如何知道谁提出了事件,用户或我更改了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;
        }
}

如果用户输入未引发事件,则该功能无法正常工作。那我怎么能找到它?

1 个答案:

答案 0 :(得分:1)

您无法确定如何引发事件,因此您将不得不采取不同的方法。这个问题最常见的解决方案可能是设置一个布尔字段,指示应用程序对特定的状态更改做出反应。例如,在内部更新值时:

private bool _settingValue = false;

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

然后,您可以根据_settingValue变量的状态更改问题中的逻辑。