WPF 为描边和填充塑造不同的不透明度

WPF shape different opacity for stroke and fill

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

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 不透明。 谢谢 帕特里克

<Ellipse Stroke="Red" Width="200" Height="100" StrokeThickness="5">
    <Ellipse.Fill>
        <SolidColorBrush Color="Green" Opacity=".25"></SolidColorBrush>
    </Ellipse.Fill>
</Ellipse>

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

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

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

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

SolidColorBrush strokeBrush = new SolidColorBrush(Color.FromArgb(/*a, r, g, b*/));

您不能为单个 Shape 对象设置两次不透明度。 Insteaf 设置不透明度两次,你可以添加一个边框到你的椭圆:

<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>

但是由于Border是一个包围椭圆的矩形,所以还需要设置cornerradius