代码之家  ›  专栏  ›  技术社区  ›  sourcenouveau

LinearGradientBrushes中的绝对渐变停止

  •  1
  • sourcenouveau  · 技术社区  · 15 年前

    我该怎么指定绝对值呢 Offset S为 GradientStop 我的S LinearGradientBrush ?

    我有一个 GridView 用一个 线性渐变画刷 作为背景:

    <Grid.Background>
        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
            <LinearGradientBrush.GradientStops>
                <GradientStop Offset="0" Color="White" />
                <GradientStop Offset="0.25" Color="White" />
                <GradientStop Offset="0.4" Color="WhiteSmoke" />
            </LinearGradientBrush.GradientStops>
        </LinearGradientBrush>
    </Grid.Background>
    

    当网格处于默认大小时,渐变的白色区域大约有60个像素单位高。当我调整网格的大小时,渐变会延伸,白色区域会变大。如何保持白色区域的高度相同,但拉伸其余的渐变?

    白色区域对应于网格中的一行,所以如果有一种方法可以使渐变跨越除第一行以外的每一行,那就没问题了。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Drew Noakes    15 年前

    据我所知,你不能像你描述的那样混合相对和绝对梯度停止。

    但是,这样的解决方案应该适用于您描述的情况(我假设您有三列五行,所以用您自己的值替换):

    <Rectangle Grid.ColumnSpan="3" Fill="White" />
    <Rectangle Grid.ColumnSpan="3" Grid.Row="1" Grid.RowSpan="4">
        <Rectangle.Fill>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                <GradientStop Offset="0" Color="White" />
                <GradientStop Offset="0.4" Color="WhiteSmoke" />
            </LinearGradientBrush>
        </Rectangle.Fill>
    </Rectangle>
    <!-- define the rest of the items in your Grid here -->
    

    这将按照您描述的方式填充背景,并且只要在两个矩形后列出网格的其他内容,它们就会出现在顶部。

    当然,这需要您知道网格中的行数和列数。如果这是动态的,则可以使用值转换器获得相同的结果。

        2
  •  1
  •   sourcenouveau    15 年前

    我最终分裂了 Grid 成多重 Grids 为了达到我想要的效果。顶部网格有白色背景,中间有渐变,底部有结束颜色。

    推荐文章