4
votes

I'm looking for a simple way to change the foreground color of a TextBlock based on the color of what is behind it, so that it is more readable. Since an image is more explicit than words, here's what I want:

I assume it could be done with a custom shader effect, but I have no idea how to create it... Anyway, perhaps there is a simpler solution.

Any idea would be welcome!

3
I am trying to achieve something similar in CSS. any ideas?blue01
@Harpreet, sorry, no idea... I don't do web developmentThomas Levesque

3 Answers

3
votes

Assuming the above is a progressbar, here is a great solution:

WPF progress bar with dynamic text & text color update

0
votes

Quick and dirty method:

Add both the white and grey textblocks, ensuring the white textblock is "on top" of the grey textblock. Bind the text of the white textblock to that of the grey textblock, so they stay the same.

Add an opacity mask to the white textblock, of which the position and/or size (or whatever required!) is bound to the position and/or size of the green rectangle (not sure if that's a templated ProgressBar or a custom control, but either way it could be done).

This would then give the effect of the text over the green bar being white.

0
votes

You could write an Valueconverter (implement IValueConverter) and pass the BackgroundColor as the converter Parameter. based on the parameter you convert the forground of the Textblock to the desired Value.