WPF 形状的描边和填充具有不同的不透明度

本文关键字:填充 不透明度 WPF | 更新日期: 2023-09-27 18:17:18

这是一个非常基本的问题。我希望能够添加一个形状,为填充和描边定义不同的不透明度。如果我添加这个:

Ellipse e = new Ellipse();
e.Width = e.Height = 150;
e.Stroke = Brushes.Aqua;
e.Fill = Brushes.Chartreuse;
e.StrokeThickness = 20;
e.Opacity = .25;
plotCanvas.Children.Add(e);

我只能设置 1 个不透明度。相反,我希望填充为 0.25 不透明,笔触为 1.0 不透明。谢谢帕特里克

WPF 形状的描边和填充具有不同的不透明度

在椭圆上设置不透明度将设置整个控件的不透明度。您要做的是为填充和描边创建专用的画笔,并控制画笔上的不透明度,即:

SolidColorBrush strokeBrush = new SolidColorBrush(Colors.Aqua);
strokeBrush.Opacity = .25d;

或者,您可以控制画笔的 Alpha 通道:

SolidColorBrush strokeBrush = new SolidColorBrush(Color.FromArgb(/*a, r, g, b*/));
<Ellipse Stroke="Red" Width="200" Height="100" StrokeThickness="5">
    <Ellipse.Fill>
        <SolidColorBrush Color="Green" Opacity=".25"></SolidColorBrush>
    </Ellipse.Fill>
</Ellipse>

或者在 C# 中,可以将填充设置为具有 Opacity 属性所需不透明度的新 SolidColorBrush。

不能

为单个 Shape 对象设置两次不透明度。设置两次不透明度,您可以在椭圆中添加边框:

<Canvas x:Name="MyCanvas" Width="1000" Height="1000" Background="White">
    <Border BorderBrush="Black" Opacity="1" BorderThickness="10" CornerRadius="{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}">
        <Ellipse Height="150" Width="150" Fill="Black" Opacity="0.25"></Ellipse>
    </Border>

但是由于边框是包围椭圆的矩形,因此您还需要设置角半径