После установки DropShadowEffect
на Button
вы устанавливаете локальное значение свойства Button
s Effect
, которое является DependencyProperty
(Button.EffectProperty
). Локальное значение переопределяет любое другое возможное значение, пока оно не будет очищено следующим образом:
button1.ClearValue( Button.EffectProperty );
Однако, это только делает работу немного более запутанной, потому что вы также должны убедиться, что вы очистили ее, если она была установлена ранее и еще не очищена.
Вместо этого вы могли бы создать AttachedProperty PreviouslyUsed
, чтобы надеть ToggleButton
s и использовать Bindings
, чтобы они получали свое значение немного более автоматически. Затем обратитесь к этому значению AttachedProperty в ваших триггерах, и у вас будет одна тень для PreviouslyUsed
, а другая для IsChecked
.
Часть, которую вам нужно подключить, - это привязка, и вам, вероятно, придется использовать IValueConverter
где-нибудь, чтобы превратить mViews[i].LocalizedName
в true
или false
для PreviouslyUsed
.
К сожалению, я недостаточно знаю о вашей настройке с mViews
и тому подобное, чтобы дать больше советов по этому поводу. Я не знаю, являются ли ваши ToggleButtons
частью привязки данных или нет. Я подозреваю, что это не так, как вы, кажется, итерируете их массив. Например, если вы связали свои mViews
объекты с ItemsSource
из ListBox
, вы можете создать DataTemplate
, который генерирует ToggleButtons
с уже установленным AttachedProperty. Это также упростит вашу ситуацию IsChecked
, связав ее с тем, выбран ли этот элемент в ListBox
, а затем ListBox
позаботится о том, чтобы был выбран только один.