【问题标题】:Linear Gradient Brush Fade WPF线性渐变画笔淡化 WPF
【发布时间】:2011-03-18 16:18:03
【问题描述】:

我有一个为标题背景着色的画笔。我喜欢画笔的外观,但希望它在底部三分之一处淡化为透明。任何想法如何做到这一点?

<LinearGradientBrush 
  x:Key="HeaderBackgroundBrush" 
  EndPoint=".5,1" 
  StartPoint="1,0">
  <GradientStop Color="#006699" Offset="1"/>
  <GradientStop Color="#80A8CC" Offset="0.5"/>
</LinearGradientBrush>

【问题讨论】:

    标签: c# wpf graphics gradient brushes


    【解决方案1】:

    如果您想在 C# 中执行此操作,请使用以下代码。这会给你一个浅粉色/鲑鱼色到完全透明的刷子。更改#FF 和#00 以获得不同的透明度渐变。

    var startColour = (SolidColorBrush)new BrushConverter().ConvertFrom("#FFff99a8");
    var endColour = (SolidColorBrush)new BrushConverter().ConvertFrom("#00ff99a8");
    _dirtyColourBackground = new LinearGradientBrush(startColour.Color, endColour.Color,new Point(0,0),new Point(1,0));
    

    【讨论】:

      【解决方案2】:

      我不确定您是否可以通过仅在画笔级别工作来做到这一点,但是您可以将OpacityMask 应用于您的控件:

      <LinearGradientBrush
          x:Key="HeaderBackgroundOpacityMask"
          StartPoint="0,0"
          EndPoint="0,1">
        <GradientStop Color="#FFFFFFFF" Offset="0"/>
        <GradientStop Color="#FFFFFFFF" Offset="0.667"/>
        <GradientStop Color="#00FFFFFF" Offset="1"/>
      </LinearGradientBrush>
      
      ...
      <Border Background="{StaticResource HeaderBackgroundBrush}"
              OpacityMask="{StaticResource HeaderBackgroundOpacityMask}">
      

      【讨论】:

        【解决方案3】:

        只需将颜色指定为 ARGB(包括 alpha),如下所示:#AARRGGBB。然后给你的最后一个渐变停止一个 0 的 alpha 值(完全透明;在你的情况下 #0080A8CC)。 HTH。

        【讨论】:

        • 这个不行,因为想要的不透明度渐变方向和颜色渐变的方向不一样
        • 把它改成这个就可以了。渐变 = new LinearGradientBrush(startColour.Color, endColour.Color,new Point(0,0),new Point(1,0));
        • 这符合我的需要。事实上,我并不知道使用 alpha 值。我在 RGB 十六进制值中看到了“额外”值,但没有意识到它是什么。