2015-06-18 3 views
0

Когда я выключаю элемент управления (кнопка), он настолько темный, что очень трудно прочитать текст.Как сбросить прозрачность прозрачного элемента управления WPF через IsEnabled после непрозрачности установки прозрачности?

Так я использую метод расширения для установки непрозрачности до 1,0 (100%), поэтому он может быть легко читать, даже при отключении:

public static void IsEnabledSpecial(this System.Windows.UIElement control, bool isEnabled) { 
    control.IsEnabled = isEnabled; 
    control.Opacity = 1.0;   // This makes a disabled control more readable 
} 

Обычно, когда непрозрачная явно не установлен для WPF управления, он переключается между 1.0 (100%), когда управление включено, и 0.35 (35%), когда элемент управления отключен.

После того, как я явно установил непрозрачность с использованием метода расширения, управление после этого перестает переключаться между 1.0 и 0.35, когда я устанавливаю IsEnabled без метода расширения. Он «застревает» на 1.0 (100%), даже если IsEnabled установлен в false;

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

+0

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

+0

@ Dennis: я не могу использовать стили/триггеры, потому что иногда мне нужно, чтобы непрозрачность была яркой при отключении (так что вы можете ее прочитать), и иногда мне нужно, чтобы она была темной при отключении - я меняю текст на кнопке как способ индикации статуса. Например, я отключу кнопку и скажу «Ожидание выполнения задания ...», а затем снова включите кнопку, когда задание будет завершено. – nb1forxp

+0

Еще вы должны сделать это в XAML со стилем, вам не хватает части ViewModel в вашем дизайне. Где вы привязываетесь к некоторому свойству IsEnabled = {BInding IsWaiting}, а затем вводите триггер в стиле, чтобы реагировать на отключенное изменение или использовать datatrigger для IsWaiting –

ответ

0

Изменение Opacity осуществляется через триггеры. Установив значение напрямую, вы переопределяете любое значение, которое может быть создано стилем или триггерами. На самом деле это не способ заниматься подобным делом. Вы должны использовать свои стили и триггеры.

Однако, вы можете добиться того, что вы хотите, просто сняв значение, назначенную Opacity:

control.ClearValue(UIElement.OpacityProperty);