Прозрачный системный цвет в градиенте (WPF) - PullRequest
2 голосов
/ 14 января 2011

Как добиться такого эффекта в 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>

Я пытался создать две кисти с соответствующим цветом и Opacity, соответственно, равными 0,0 и 1,0, но компилятор отказался принимать Brush в качестве цвета (что вполне логично, если подумать :)) 1004 *

С наилучшими пожеланиями - Spook.

Ответы [ 2 ]

6 голосов
/ 14 января 2011

Я бы создал 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);
    }
}

А потом вы используете это так:

<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>
0 голосов
/ 14 января 2011

Spook,

Почему следующее не работает для вас?

<LinearGradientBrush x:Key="BrightSeparatorGradient" StartPoint="0.0, 0.5" EndPoint="1.0, 0.5">
    <GradientStop Offset="0.0" Color="Transparent" /> 
    <GradientStop Offset="0.5" Color="{StaticResource {x:Static SystemColors.ControlLightColorKey}}" />
    <GradientStop Offset="1.0" Color="Transparent" /> 
 </LinearGradientBrush>
...