Dobre pytanie, ale myślę, że to niemożliwe. Jeśli na ControlTemplate znajduje się trochę nakładki, nie można sformułować funkcji, która oblicza ciemniejszy kolor, który następnie będzie wyglądał jak zamierzony.
np. gdy wpiszesz czerwony, który jest: 255,0,0
otrzymasz 255,153,153
, teraz funkcja, która musiałaby zostać zastosowana do twojego początkowego koloru, musiała przyciemnić kolor czerwony, to oczywiście można było zrobić tylko w czerwonym kanale, ponieważ zielony i niebieski są już zerowe . Problemem nie jest jednak czerwony kanał (który kończy się jako 255, a więc nie ma na niego wpływu), więc wszelkie zmiany w tym będą służyć tylko do zaciemnienia koloru, zamiast go przyciemnić.
Edycja: W tym nieco bardziej mathmatical wykonania, funkcja, która jest stosowana przez przejrzystości wybór jest:
f (x) = 0,4X + 153
Jeśli zastosujesz to do wszystkich kanałów swojego koloru, zobaczysz, że tak właśnie jest. Jak uzyskać wartości, które chcemy uzyskać? Dość proste, to odwrócić funkcję, którą jest to,
f^(- 1), (x) = -2,5 (153,0 - X)
Bardzo! Teraz pozwala zastosować to do koloru:
R: -130,0
G: 0
B: 140
Hmm, nie tak wielka, mimo wszystko sądzę.
Ta wartość ujemna jest dokładnie powodem, dla którego nie zawsze jest to możliwe, ponieważ każdy kolor, który zawiera komponenty poniżej 153
, nie jest odwracalny.
można podać kod użyty do ustawienia koloru? – Jakub
Podejrzewam, że kolor jest wykonywany jako półprzeźroczysty i musisz go zamaskować. Nie widząc, jak zmieniasz kolor, nie mam łatwego sposobu, aby zasugerować coś więcej. –
Nie pomaga, jeśli próbujesz wykonać wysoce niestandardowy styl, ale wolę pozostawić domyślne kolory systemowe, a podczas tworzenia niestandardowych elementów sterujących pożyczyć domyślne kolory systemu z podobnych kontekstów. Jest to przydatne w celu zapewnienia zgodności z trybami dostępności okien i sprawia, że użytkownicy mogą korzystać z motywów okna bez powodowania nieprzyjemnych wizualnych konfliktów. –