Как я могу создать переменную, которая изменяется в зависимости от выбранного элемента?

#c# #wpf

#c# #wpf

Вопрос:

У меня возникла проблема с кодом C # WPF: у меня есть несколько цветных изображений в окне, и когда я нажимаю на него, оно становится размытым (это работает). Но мой код действительно плохо оптимизирован, и я хотел бы получить некоторую помощь!

Вот небольшая часть моего кода :

 private void BrownBlur(object sender, MouseButtonEventArgs e)
{
   Brown.BlurApply(blurRadius: 15, new TimeSpan(0, 0, 1), TimeSpan.Zero);
}

private void LightGreenBlur(object sender, MouseButtonEventArgs e)
{
   LightGreen.BlurApply(blurRadius: 15, new TimeSpan(0, 0, 1), TimeSpan.Zero);
}
  

И это выглядит так для каждого цвета окна…

Я знаю, что это, вероятно, худший способ что-то закодировать, поэтому я попробовал что-то вроде этого :

 private void isBlurred()
{
   this.BlurApply(blurRadius: 15, new TimeSpan(0, 0, 1), TimeSpan.Zero);
}
  

Но это все окно, которое становится размытым…

Итак, я спрашиваю вас, ребята, знаете ли вы альтернативу «этому.BlurApply» или, если вы знаете способ создать переменную, которая изменяется в зависимости от выбранного элемента!

Комментарии:

1. Сигнатура sender метода object sender — это «то, что было нажато». Можете ли вы просто получить его цвет и размыть его? Или использовать его для поиска того, что такое LightGreen? Или поместите все объекты в вашем окне в коллекцию (например, словарь) и сопоставьте с вашей вещью (отправителем) с тем, что вы размываете

2. Самый простой способ для меня — действительно получить цвет изображения. Как я могу получить его цвет в переменной like currentImage ?

Ответ №1:

Одно событие для всех ваших отправителей

 private void OnBlureObjClick(object sender, MouseButtonEventArgs e)
{ 
  UIElement obj = sender as UIElement; //other parent class or interface
  obj.BlurApply(blurRadius: 15, new TimeSpan(0, 0, 1), TimeSpan.Zero);
}
  

Затем назначьте событие всем вашим объектам

 Brand.OnMouseButtonClik  =OnBlureObjClick;
LightGreen.OnMouseButtonClik  =OnBlureObjClick;
  

Или создайте коллекцию ваших объектов, а затем добавьте событие в цикл foreach

 foreach(var item in collection)
{
 item .OnMouseButtonClik  =OnBlureObjClick;
}
  

Комментарии:

1. Спасибо! Это сработало нормально, теперь я попытаюсь узнать больше об UIElement 🙂 Большое вам спасибо!