Свойство BackColor
по умолчанию является окружающим свойством, что означает, что оно наследует свое значение от родительского элемента управления. Когда вы устанавливаете его явно на определенное значение, это переопределяет природу окружения и заставляет его использовать это конкретное значение.
Стандартный элемент управления Windows не поддерживает пользовательские цвета, поэтому WinForms фактически нарисует элемент управления, чтобы дизайнер мог переопределить его цвет. Таким образом, если вы хотите иметь уродливую зеленую или красную кнопку, вы можете это сделать.
Здесь произошло то, что вы фактически установили пользовательский цвет фона для элемента управления кнопки (вы установили его на цвет фона 3D-элемента управления, но он мог бы так же легко быть фиолетовым), и это вынуждает WinForms настраивать элемент управления. и закрасьте его фон указанным цветом. Это то, что придает ему «плоский» вид — цвет фона теперь окрашивается одним пользовательским цветом, а не с использованием эффекта градиента по умолчанию. Это было бы не так заметно в теме Windows Classic (до Aero), потому что кнопки на самом деле были окрашены цветом плоского элемента управления 3D. Но Aero добавил градиенты и другие «горячие» эффекты, из-за чего это торчало как больной палец.
Чтобы очистить значение, которое вы установили, и восстановить окружающий характер свойства, вы можете щелкнуть правой кнопкой мыши свойство в окне свойств и выбрать «Сброс». Вы также можете сделать это с помощью кода, установив для свойства значение default(Color)
:
myButton.BackColor = default(Color);
Вам также потребуется установить свойство UseVisualStyleBackColor
обратно на true
, которое автоматически устанавливается на false
всякий раз, когда свойство BackColor
изменяется для поддержки пользовательского цвета фона.
В качестве альтернативы вы можете указать WinForms полностью игнорировать такие пользовательские свойства и попросить Windows отрисовать элемент управления кнопкой. Сделайте это, установив для свойства FlatStyle
значение FlatStyle.System
.
Опять же, это можно сделать либо в дизайнере, либо через код. Это не только предотвратит изменение таких глупых вещей, как цвет фона, создавая ужасно уродливый элемент управления, но также восстановит исходное поведение элемента управления кнопки Win32 для вашего приложения WinForms, включая тонкие эффекты затухания Aero при наведении.
Я понятия не имею, почему это не было по умолчанию. Вам придется сделать специальный запрос, чтобы получить уродливые и нестандартные элементы управления. Это не должно происходить автоматически. Я могу только предположить, что это была уступка программистам VB 6, которые годами могли делать всевозможные уродливые элементы управления.
person
Cody Gray
schedule
13.05.2012