设置 WPF 标签内容 Alpha 透明度而不是整个控件不透明度

Set WPF Label Content Alpha Transparency instead of entire control Opacity

我正在尝试将标签的内容设置为不可见,以便我可以将其覆盖在后面的内容上。例如,控件的背景是纯色,但文本具有 alpha 透明度,可以让我看穿整个控件(就像 photoshop 技巧)。这样,可以看到具有可变背景的动态内容。我将此模式应用于 PNG 文件,但当内容需要更改时,显然不会这样做。这个问题的一个很好的例子(因为我不太擅长问)可以在这里找到......但是,当然,这是针对 css 的。 (How to make "see through" text?) 如有任何帮助,我们将不胜感激

所以我找到了解决这个问题的方法... 诀窍是使用 Clip 而不是 OpacityMask。

先看布局:

<Grid Background="Red">
    <Border Background="White" Name="targetImage" VerticalAlignment="Center" Height="200"/>

    <Button VerticalAlignment="Bottom" Content="render" Click="ButtonBase_OnClick"></Button>
</Grid>

这里红色背景的网格可以作为背景图片! 它里面的边框用白色覆盖它。 然后我放了一个按钮,在按下时从边框中删除我们想要的文本。

这里是按钮点击事件的代码:

private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        Typeface face = new Typeface("Candara");
        FormattedText tx = new FormattedText("Hello", Thread.CurrentThread.CurrentUICulture, FlowDirection.LeftToRight, face, 70, Brushes.Black);
        Geometry textGeom = tx.BuildGeometry(new Point(0, 0));
        Rect boundingRect = new Rect(new Point(-100000, -100000), new Point(100000, 100000));
        RectangleGeometry boundingGeom = new RectangleGeometry(boundingRect);
        GeometryGroup group = new GeometryGroup();
        group.Children.Add(boundingGeom);
        group.Children.Add(textGeom);
        targetImage.Clip = group;   


    }

基本上是在创建文本!然后我们需要反转掩码。 反转是在 boundingRect 的帮助下完成的。

编辑:差点忘了。您可以将所有这些逻辑放在用户控件中。并且 运行 每次用户控件的文本 属性 发生变化时都使用此代码。

玩得开心;)