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

Posted

技术标签:

【中文标题】设置 WPF 标签内容 Alpha 透明度而不是整个控件的不透明度【英文标题】:Set WPF Label Content Alpha Transparency instead of entire control Opacity 【发布时间】:2016-04-07 04:46:09 【问题描述】:

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

【问题讨论】:

这是我自己的问题一段时间...“从边框背景中屏蔽文本”。有一种方法可以实现这一点,但它不涉及使用标签。通过后面的代码,您可以为移除文本的边框定义一个 OpacityMask。 我不确定我是否遵循。我了解 opacitymask 的使用,但到目前为止,我在此“用户控件”中使用它的尝试都没有结果。我只是在后面的代码中尝试过,但无济于事。我们在边框内放置了什么来实现透明文本?文本块?根据您的建议,我已经尝试了一些组合,但是仍然没有太多可以展示的东西。 :( 我想说的是,如果我们只能修改生成的 BitmapSource 对象像素并反转其 Alpha 通道,我确信我们可以使用技术 (***.com/a/28626055/4805219) 渲染文本块并将其设置为 OpacityMask 它会工作! :) 【参考方案1】:

所以我找到了解决这个问题的方法...... 诀窍是使用 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 的帮助完成反转。

编辑:差点忘了。您可以将所有这些逻辑放在用户控件中。并在每次用户控件的 Text 属性更改时运行此代码。

玩得开心;)

【讨论】:

你怎么这么快就找到了答案?天才!我仍在翻转视觉中的逻辑。我之前通过 OCR 屏幕截图做到了这一点,并且知道该策略涉及什么。但是,这是天才!! +200 :) 非常感谢,已经在这里呆了几个小时了! :P 反对使用与 1 年前的答案完全相同的代码和变量名称。 ***.com/a/27942156/2353523

以上是关于设置 WPF 标签内容 Alpha 透明度而不是整个控件的不透明度的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式设置 WPF 背景不透明度

Three.js png 纹理 - alpha 呈现为白色而不是透明

使WPF窗口的一部分点击,而不是它的控件

如何更改滚动视图的 alpha 值

UIView的不透明度和alpha是不是相同[重复]

将不透明度设置为滑动标签布局?