Как отключить цвет фона в TextBox в WPF

Я видел следующий stream, который связан с моим вопросом:

WPF ComboBox: цвет фона при отключении

Вышеупомянутое касается изменения шаблона контента для ComboBox . Я работаю с WPF, я несколько новичок в стилях и шаблонах, и я хочу изменить тусклый серый цвет фона отключенного TextBox на другой цвет. Мы часто используем TextBoxes в нашем приложении, и мы находим, что настройки цвета по умолчанию трудно читать.

Я создал следующую попытку решения. Но, конечно, это не сработает. Может ли кто-нибудь дать мне мнение о том, почему?

Загрузить изображение

К сожалению для элемента управления TextBox, похоже, что это не так просто, как просто добавление триггера и изменение цвета фона, когда условие триггера истинно. Для этого вам нужно переопределить весь контрольный шаблон. Ниже приведен пример того, как вы можете это сделать:

            

РЕДАКТИРОВАТЬ:

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

                                                                                                                                TextBox    

Вы можете использовать приведенный ниже fragment:

Вместо проверки свойства IsEnable используйте свойство IsReadonly элемента управления TextBox.

  

Если вам необходимо применить его для всех элементов управления текстовыми полями, используйте приведенный выше код. Для конкретного текстового поля просто установите ключ и примените стиль к этому текстовому полю.

Для этой ситуации мне нравится установить Focusable=false и установить цвет фона на мое желаемое значение (в триггере с привязкой к данным). Возможно, это немного взломанно, но так же переписывает шаблон управления для всего TextBox . Альтернативой Focusable является IsReadyOnly , но это не работает для многих элементов управления. Тем не менее, это гарантирует, что каретка исчезнет.

Вы никогда не используете ControlTemplate, который вы определили. Кроме того, вам нужен стиль, а не (обязательно) ControlTemplate.

Я думаю, вы хотите что-то вроде следующего:

      

Старайтесь избегать переопределения шаблонов управления, где вы можете. Они, как правило, добавляют много накладных расходов на код, и со временем их становится сложно поддерживать.

Я бы использовал следующий код в событии Loaded:

 ClassicBorderDecorator o = VisualTreeHelper.GetChild(this.textBox1, 0) as ClassicBorderDecorator; if (o != null) { o.Background = new SolidColorBrush(Colors.Transparent); } 

Если вы посмотрите на шаблон текстового поля, вы заметите, что шаблон имеет триггер для свойства IsEnabled False и устанавливает его цвет фона элемента «Bd» в SystemColors.ControlBrushKey.

Если вы переопределите этот цвет в стиле, он достигнет того, что вы хотите сделать.

  
 By adding  after  and before  will make your text box behave like normal winforms textbox.      

Код, взятый со следующей веб-страницы:

wpf: выбор текста в TextBox с помощью IsReadOnly = true?

И стиль изменен для соответствия winforms. (Их появление включено = false, not readonly = true)

И, конечно, в вашем текстовом поле должен быть установлен атрибут IsReadOnly = «True».

  • Как ссылаться на ресурс CSS / JS / image в шаблоне Facelets?
  • Вызов шаблона с несколькими параметрами трубопровода
  • Шаблоны C ++ Угловые скобки Pitfall - Что такое C ++ 11?
  • Как преобразовать lambda в std :: функцию с помощью шаблонов
  • Вывод типа параметра шаблона c ++
  • Razor рассматривает как шаблоны электронной почты
  • C ++ 11 не выводит тип, когда задействованы функции std :: function или lambda
  • Зависимая область и вложенные шаблоны
  • Как я могу переопределить шаблон @ Html.LabelFor?
  • Ошибка «Undefined symbols» с компоновщиком простого шаблона
  • C ++ шаблоны для производительности?
  • Interesting Posts

    Вставить текстовый файл в ресурс в собственном приложении Windows

    утечка памяти? почему java.lang.ref.Finalizer есть столько памяти

    Как заставить Firefox вернуться на предыдущую вкладку при закрытии вкладки?

    Как получить путь к папке из пути к файлу с помощью CMD

    В Windows 2000 «Точка входа процедуры EncodePointer не может быть расположена в библиотеке динамических ссылок KERNEL32.dll"

    Java два varargs одним способом

    asp.net mvc помещает controllerы в отдельный проект

    Мерцание экрана ноутбука Lenovo G530

    Разница между статическим classом и одноэлементным шаблоном?

    Как получить восстановление TFS2015 Build (Build.vnext) и NuGet для использования пользовательских источников пакетов

    При использовании оболочки, как сохранить имя classа и метода для Log4Net для регистрации?

    Использовать adsl-модем как wifi-маршрутизатор

    Сравните std :: wstring и std :: string

    Java: диапазон индексов подстроки

    Как работает CorFlags.exe / 32BIT +?

    Давайте будем гением компьютера.