银色渐变

时间:2009-10-22 00:41:39

标签: silverlight

我想知道是否有办法以编程方式更改XAML中指定的stopgradient颜色。例如:

<Rectangle Width="1280" Height="1024">
    <Rectangle.Fill>
        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
            <GradientStop Color="Black" Offset="0.0" />
            <GradientStop Color="White" Offset="0.25" />
        </LinearGradientBrush>
    </Rectangle.Fill>
</Rectangle>

当我点击屏幕上的按钮时,我想将“黑色”渐变停止更改为“红色”。任何建议

4 个答案:

答案 0 :(得分:1)

我明白了。这是C#中的代码:

        Rectangle rect = new Rectangle();
        GradientStop gs_black = new GradientStop();
        GradientStop gs_white = new GradientStop();
        LinearGradientBrush lgb = new LinearGradientBrush();

    private void cb_test_Click(object sender, RoutedEventArgs e)
    {
        rect.Width = 1280;
        rect.Height = 1024;

        gs_black.Offset = 0;
        gs_black.Color = Color.FromArgb(255, 0, 0, 0);

        gs_white.Offset = .25;
        gs_white.Color = Color.FromArgb(255, 255, 255, 255);


        lgb.StartPoint = new Point(0, 0);
        lgb.EndPoint = new Point(0, 1);

        lgb.GradientStops = new GradientStopCollection();

        lgb.GradientStops.Add(gs_black);
        lgb.GradientStops.Add(gs_white);

        rect.Fill = lgb;

        canvasname.Children.Add(rect);
    }

  private void cb_change_color_Click(object sender, RoutedEventArgs e)
    {
        lgb.GradientStops.Remove(gs_black);
        gs_black.Offset = 0;
        gs_black.Color = Color.FromArgb(255, 0, 255, 0);
        lgb.GradientStops.Add(gs_black);

    }

答案 1 :(得分:1)

将x.Name属性添加到XAML中的渐变色标。 然后,您可以在后面的代码中按名称访问它。

<GradientStop Color="Black" Offset="0.0" x:Name="MyStop" />

那么你的代码就是

MyStop.Color=Colors.Red;

您还应该使用Visual State Manager和Click上的GoToState Action来执行此操作 - 然后您可以在没有任何代码的情况下执行此操作。您不应该将代码与设计混合 - 设计(颜色,渐变信息)应保留在XAML中并使用您的代码进行逻辑。

答案 2 :(得分:0)

使用'&lt;'GradientStop Color =“Black”Offset =“0.0”x:Name =“MyStop”/&gt;工作。我在网上搜索了这个主题,很多人都说不能这样做。

答案 3 :(得分:0)

要更改资源中使用的GradientStop的颜色,您需要使用x:Key,例如

(this.Resources["xKeyName"] as LinearGradientBrush).GradientStops[0].Color = Color.FromArgb(255, 69, 69, 69);

这将为以下UserControl资源中的第一个GradientStop设置颜色

<UserControl.Resources>
    <LinearGradientBrush x:Key="xKeyName">
        <GradientStop Offset="0" /><!-- Colorset via code-behind -->
        <GradientStop Color="Black" Offset="1.0" />
    </LinearGradientBrush>
</UserControl.Resources>