我如何知道谁在WPF中引发了路由事件?
我有一个滑块,我正在内部更新该值。但是,也可以接受用户输入,以更改内部参数 问题是:我如何知道谁引发了事件、用户或我更改slider.value的类 在我的例子中,这是处理程序:我如何知道谁在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
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
谢谢,这就是我所想的。。。这不是一个很好的解决方案,我在想也许有更好的方法。。。但看起来这将是我的方法。