Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何知道谁在WPF中引发了路由事件?_Wpf_Events_Slider_User Input - Fatal编程技术网

我如何知道谁在WPF中引发了路由事件?

我如何知道谁在WPF中引发了路由事件?,wpf,events,slider,user-input,Wpf,Events,Slider,User Input,我有一个滑块,我正在内部更新该值。但是,也可以接受用户输入,以更改内部参数 问题是:我如何知道谁引发了事件、用户或我更改slider.value的类 在我的例子中,这是处理程序: private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { var slider = sender as Slider; if (slider

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

问题是:我如何知道谁引发了事件、用户或我更改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;
        }
}
private void Slider\u值已更改(对象发送方,RoutedPropertyChangedEventArgs e)
{
var slider=发送方作为滑块;
if(slider==null)返回;
var col=this.SelectedColor;
开关((字符串)slider.Tag)
{
大小写“色调”:this.SetHue(ValueHue.Value);break;
案例“Sat”:此.SetSatBri(ValueSat.Value,CurrentBri);中断;
案例“Bri”:此.SetSatBri(当前SAT,值Bri.Value);中断;
案例“R”:此.SetColor(Color.FromRgb(Convert.ToByte(ValueR.Value)、col.G、col.B));中断;
案例“G”:此.SetColor(Color.fromgb(col.R,Convert.ToByte(ValueG.Value),col.B));中断;
案例“B”:此.SetColor(Color.FromRgb(col.R,col.G,Convert.ToByte(ValueB.Value));中断;
}
}

如果事件不是由用户输入引发的,则函数无法正常工作。那么我如何才能找到答案呢?

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

private bool _settingValue = false;

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

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

您是否尝试过
e.OriginalSource
谢谢,这就是我所想的。。。这不是一个很好的解决方案,我在想也许有更好的方法。。。但看起来这将是我的方法。