透明系统颜色渐变(WPF)

Spo*_*ook 2 wpf xaml gradient transparent

如何在XAML中实现这样的效果:

    <LinearGradientBrush x:Key="BrightSeparatorGradient" StartPoint="0.0, 0.5" EndPoint="1.0, 0.5">
        <GradientStop Offset="0.0" Color="{StaticResource {x:Static SystemColors.ControlLightColorKey}}" /> <!-- But fully transparent -->
        <GradientStop Offset="0.5" Color="{StaticResource {x:Static SystemColors.ControlLightColorKey}}" />
        <GradientStop Offset="1.0" Color="{StaticResource {x:Static SystemColors.ControlLightColorKey}}" /> <!-- But fully transparent -->
    </LinearGradientBrush>
Run Code Online (Sandbox Code Playgroud)

我试图创建两个具有适当颜色和不透明度设置的画笔,分别为0.0和1.0,但编译器拒绝将画笔作为一种颜色(这是非常逻辑的,在第二个想法:)).

最好的问候 - 幽灵.

Abe*_*cht 6

我会创建一个a MarkupExtension,Color并返回Color指定的不透明度:

public class OpacityExtension : MarkupExtension
{
    private readonly Color color;
    public byte Opacity { get; set; } // defaults to 0, so you don't have 
                                      // to set it for the color to be transparent

    public OpacityExtension(Color color)
    {
        this.color = color;           
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return Color.FromArgb(Opacity, color.R, color.G, color.B);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你就像这样使用它:

<LinearGradientBrush x:Key="BrightSeparatorGradient" StartPoint="0.0, 0.5" EndPoint="1.0, 0.5">
    <GradientStop Offset="0" Color="{lcl:Opacity {StaticResource {x:Static SystemColors.ControlLightColorKey}}}" />
    <GradientStop Offset=".5" Color="{StaticResource {x:Static SystemColors.ControlLightColorKey}}" />
    <GradientStop Offset="1" Color="{lcl:Opacity {StaticResource {x:Static SystemColors.ControlLightColorKey}}}" />
</LinearGradientBrush>
Run Code Online (Sandbox Code Playgroud)