WPF为笔触和填充形成不同的不透明度

时间:2015-10-12 09:03:59

标签: c# wpf opacity fill stroke

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

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

3 个答案:

答案 0 :(得分:5)

在椭圆上设置不透明度将设置整个控件的不透明度。你想要做的是为Fill和Stroke创建专用的画笔,并控制画笔上的不透明度,即:

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

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:-2)

您无法为单个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