我想知道是否有办法以编程方式更改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>
当我点击屏幕上的按钮时,我想将“黑色”渐变停止更改为“红色”。任何建议
答案 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>