2009-10-22 28 views
0

我想知道是否有方法以編程方式更改在XAML中指定的停止漸變顏色。例如:silverlight gradient

<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> 

當我點擊我的屏幕上的按鈕,我想改變「黑」漸變停止爲「紅色」。任何建議

回答

1

將x.Name屬性添加到XAML中的漸變停止處。 然後,您可以在後面的代碼中通過名稱訪問它。

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

那麼你的代碼將

MyStop.Color=Colors.Red; 

你也應該看看在點擊與視覺狀態管理和GotoState函數行動這樣做 - 那麼你可以這樣做沒有任何代碼。您不應該將代碼與設計混合 - 設計(顏色,漸變信息)應該保存在XAML中,並使用您的代碼進行邏輯處理。

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); 

    } 
0

使用'<'GradientStop Color =「Black」Offset =「0.0」x:Name =「MyStop」/>工作。我在網上搜索這個話題,很多人都說不能這樣做。

0

要改變漸變停在你需要使用x上的資源使用的顏色:鍵,例如

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

這將設置第一個漸變停止顏色下面的用戶控件資源

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