wpf отключен уровень непрозрачности
Мне нужно изменить непрозрачность элементов управления в контейнере (сетка / док-панель / и т. Д.), Когда они отключены, чтобы они выглядели ярче или менее тусклыми.
Когда контейнер отключен, вложенные элементы управления кажутся уменьшенными до около 0,5 (скажем) непрозрачности. Если я пытаюсь отрегулировать непрозрачность контейнера, когда он отключен, макс всегда ограничивается 0,5, независимо от того, что я установил. Метод назначения непрозрачности также не имеет значения, я пробовал непосредственно в коде и со стилями / триггерами.
Я предполагаю, что это реализовано в контейнере путем маскировки прямоугольником (или другим типом окна) и установки непрозрачности. Затем из MSDN говорится:
Непрозрачность применяется от родительских элементов вниз по дереву элементов к дочерним элементам, но видимые эффекты вложенных настроек непрозрачности не указываются в значении свойства отдельных дочерних элементов. Например, если список имеет непрозрачность 50% (0,5), а один из его элементов списка имеет собственную непрозрачность, установленную на 20% (0,2), чистая видимая непрозрачность для этого элемента списка будет отображаться так, как если бы она была 10% (0.1), но значение свойства свойства Opacity элемента списка по-прежнему будет равно 0,2 при запросе.
Итак, я понимаю, почему я вижу это поведение, я просто надеюсь, что есть способ переопределить его?
Если нет, то единственная альтернатива, которую я могу придумать, - это прокрутить свое собственное отключенное поведение своим собственным прямоугольником, и тогда я смогу установить нужный уровень непрозрачности. Просто звучит как ненужные хлопоты для меня, если я что-то упускаю?
Обратите внимание, что меня заинтересовал этот вопрос, но установка непрозрачности из кода таким способом не делает ничего другого, отключенные элементы управления кажутся незатронутыми.
1 ответ
Обычно отключенное состояние в элементах управления WPF отображается с использованием различных кистей "Фон" и "Передний план", которые задаются с помощью триггера в шаблоне элемента управления вместо изменения непрозрачности. Например, для TextBox у него есть этот триггер:
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
Непрозрачность не изменилась. Если у вас есть GroupBox с IsEnabled="False", тогда все дочерние элементы управления наследуют состояние IsEnabled.
Если вы хотите каким-то образом изменить отключенный внешний вид, создайте собственный стиль шаблона или измените стиль по умолчанию.