如何避免WPF的LinearGradientBrushes中的色带?

时间:2016-02-07 06:03:44

标签: c# .net wpf colors linear-gradients

除了在软件中使用图像和抖动渐变(或者使用为我进行抖动的像素着色器搞乱)之外,我还能做些什么来避免使用WPF中的单色渐变中的色带。 NET 4.6.1?

相关:有没有办法强制WPF在幕后使用16bpc颜色?

1 个答案:

答案 0 :(得分:1)

我发现的一种方法是将渐变添加到容器中,给它一个小的负边距,使其溢出一点,向渐变添加一个BlurEffect,然后在父容器上打开ClipToBounds。这样,梯度就会以牺牲性能为代价而变得更好。

根据您的使用情况,这可能不太可行。

示例:

<Grid Height="26" Margin="-5,0" ClipToBounds="True">
    <Grid Margin="-5">
        <Grid.Effect>
            <BlurEffect Radius="6" />
        </Grid.Effect>
        <Grid.Background>
            <LinearGradientBrush>
                <GradientStop x:Name="GradientStop7" Color="Magenta" Offset="0.0" />
                <GradientStop x:Name="GradientStop8" Color="DarkOrchid" Offset=".2" />
                <GradientStop x:Name="GradientStop9" Color="Purple" Offset="1" />
            </LinearGradientBrush>
        </Grid.Background>
    </Grid>
</Grid>

负梯度应该等于模糊半径,以便它不会在边缘变得透明。