WPF: Invert OpacityMask
- by Meleak
Consider the following piece of Xaml
<Grid Background="Blue">
<Border Width="100" Height="60" BorderBrush="Black" BorderThickness="2">
<Border Background="Red">
<Border.OpacityMask>
<VisualBrush>
<VisualBrush.Visual>
<TextBlock Text="Text"
Foreground="#FF000000"
Background="#00000000"/>
</VisualBrush.Visual>
</VisualBrush>
</Border.OpacityMask>
</Border>
</Border>
</Grid>
It will look like this because of the OpacityMask whos only non-transparent part is the Foreground of the TextBlock.
Now if I switch the Colors for Foreground and Background in the TextBlock like this
<TextBlock Text="Text"
Foreground="#00000000"
Background="#FF000000"/>
I get this because the even though the Foreground is transparent the Background behind it is not, resulting in a useless OpacityMask :)
Is there anyway I can get this? Basically an inverted OpacityMask
The reason I'm asking this is because of the answer I made in this question, using the approach from this link. Even though it works, it feels very "hacky".
Am I missing some other way to do this here?
Update
To clarify, even though my example is about a TextBlock, it could be anything. Ellipse/Image/Path etc. The feature I'm after is "Invert OpacityMask"