WPF透明文本与不透明背景

时间:2015-01-14 11:29:03

标签: c# wpf xaml

我需要使用WPF / XAML的透明文本和不透明的背景。这可能吗?

以下是一个示例,但我不使用css:css, transparent text with opaque background

也许有一种方法可以用c#生成带有不透明背景的透明文本?

背景应该是一个Image,我用Canvas尝试了它:

<Grid>
    <!-- shows only a black box, but should show red text on black background-->
    <Canvas Width="100" Height="20" Background="Red"/>
    <TextBlock Text="My text" Foreground="#00000000" Background="#FF000000"/>
</Grid>

2 个答案:

答案 0 :(得分:1)

你可以通过将文字转换为Path,然后将Clipping改为Rectangle白色Path来实现此目的。

试试这个:

<Grid Grid.Row="1">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition />
                    </Grid.RowDefinitions>

                    <TextBox x:Name="textToMask" TextChanged="textToMask_TextChanged" />
                    <Rectangle Grid.Row="1" x:Name="target" Fill="Yellow"/>
</Grid>

c#c​​ode

private void textToMask_TextChanged(object sender, TextChangedEventArgs e)  
{  
    Typeface face = new Typeface("Candara");  
    FormattedText tx = new FormattedText(textToMask.Text, 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);  
    target.Clip = group;  
} 

答案 1 :(得分:1)

您可以使用Opacity上的SolidColorBrush属性进行设置。它取值为0到1.其中0是完全透明度,1完全不透明。但是,如果您将文本设置为透明,那么您将看到的是文本框的背景。在示例中,我设置了部分不透明度,因此您可以看到文本是灰色的。

<TextBlock Text="Test" Background="Red" Width="100" Height="100">
    <TextBlock.Foreground>
        <SolidColorBrush Opacity="0.25" Color="Black"/>
    </TextBlock.Foreground>
</TextBlock>

获取透明度并在文本块下方查看控件背景的其他方法是设置透明前景和部分透明背景。