C# WPF三点梯度

C# WPF三点梯度,c#,wpf,xaml,C#,Wpf,Xaml,使用C#如何生成具有3个点的渐变: 白色(左) 蓝色(右) 黑色(底部) 我现在的做法是叠加2个渐变 如果可能的话,我想把它简化成1个梯度 C# XAML <Rectangle x:Name="rectangle1" HorizontalAlignment="Left" Width="255" Height="255" VerticalAlignment="Top"> </Rectang

使用C#如何生成具有3个点的渐变:

  • 白色(左)
  • 蓝色(右)
  • 黑色(底部)
我现在的做法是叠加2个渐变

如果可能的话,我想把它简化成1个梯度

C#

XAML

<Rectangle x:Name="rectangle1"
           HorizontalAlignment="Left"
           Width="255"
           Height="255"
           VerticalAlignment="Top">
</Rectangle>

<Rectangle x:Name="rectangle2"
           HorizontalAlignment="Left"
           Width="255"
           Height="255"
           VerticalAlignment="Top">
</Rectangle>

矩形1

矩形2

矩形1+2

你可以用不透明度遮罩和线性渐变笔刷来接近,但这并不完美

<Rectangle>
    <Rectangle.Fill>
        <LinearGradientBrush  EndPoint="0.5,1" StartPoint="0.5,0" >
                <GradientStop Color="Blue" Offset="0"/>
                <GradientStop Color="Black" Offset="1"/>
            </LinearGradientBrush>
        </Rectangle.Fill>

        <Rectangle.OpacityMask>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                <GradientStop Color="Transparent" Offset="0"/>
                <GradientStop Color="Black" Offset="0.5"/>
            </LinearGradientBrush>
        </Rectangle.OpacityMask>
</Rectangle>


你可以用不透明度遮罩和线性渐变笔刷来接近,但这并不完美

<Rectangle>
    <Rectangle.Fill>
        <LinearGradientBrush  EndPoint="0.5,1" StartPoint="0.5,0" >
                <GradientStop Color="Blue" Offset="0"/>
                <GradientStop Color="Black" Offset="1"/>
            </LinearGradientBrush>
        </Rectangle.Fill>

        <Rectangle.OpacityMask>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                <GradientStop Color="Transparent" Offset="0"/>
                <GradientStop Color="Black" Offset="0.5"/>
            </LinearGradientBrush>
        </Rectangle.OpacityMask>
</Rectangle>


简单地说,你不能定义二维梯度 最简单的技术是您正在使用的技术:使用2个线性渐变执行叠加。

正如弗雷德里克的回答所表明的那样,使用不透明度遮罩同样有效,但归根结底都是结合渐变:WPF不允许(仍然)定义2D渐变。

简单地说,你不能定义二维渐变。
最简单的技术是您正在使用的技术:使用2个线性渐变执行叠加。

正如Fredrik的回答所表明的,使用不透明度遮罩同样有效,但归根结底都是结合渐变:WPF不允许(仍然)定义2D渐变。

看起来您的解决方案已经是一种很好的方法:另一种方法是从原始像素数据创建位图并在图像控件中显示。或者创建一个可写位图并更新其缓冲区。看起来您的解决方案已经是一种很好的方法:另一种方法是从原始像素数据创建位图并在图像控件中显示。或者创建一个可写位图并更新其缓冲区。