日期:2014-05-20  浏览次数:21729 次

WPF中如何动态改变矩形Rectangle的渐变色
100分请高手指教,不甚感谢
Rectangle(名字为rect1)的渐变色为:
<Setter Property="Rectangle.Fill">
  <Setter.Value>
  <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
  <GradientStop Color="#CBEE94" Offset="0"/>
  <GradientStop Color="#A2DA70" Offset="1"/>
  </LinearGradientBrush>
  </Setter.Value>
</Setter>

我点一个按钮,之后,想改变Rectangle的渐变色,我把渐变色放在一个Style中
  <Style x:Key="rect1Style" >
  <Setter Property="Rectangle.Fill">
  <Setter.Value>
  <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF4B5E84" Offset="0"/>
<GradientStop Color="#FF182847" Offset="1"/>
</LinearGradientBrush>
  </Setter.Value>
  </Setter>
  </Style>

怎么添加代码?

------解决方案--------------------
1、最简单的,给rect1设置两个不同键值的Style: 
private void button2_Click(object sender, RoutedEventArgs e)
{
//把以前的Style清空
this.rect1.Style = null; 
//给Style重新赋值即可
this.rect1.Style = (Style)this.FindResource("rect1StyleStore");
}
2、还有就是换肤功能,可以参考如下的博客:
http://www.codeproject.com/KB/WPF/SkinningInWPF.aspx
google里换肤的例子很多的
------解决方案--------------------
这篇博客是专门解决这个问题的,希望对你有所帮助
http://www.cnblogs.com/zhouyinhui/archive/2007/08/02/840326.html
------解决方案--------------------
一一指定样式是一种解决办法,但是一个界面如果控件多的话,全部指定样式很麻烦.
google里换肤的例子大部分只是换某一个控件的背景,而非整个主题

1. 如果要换肤的话,在WPF中必须通过重新设计style与Template来实现的,然后把这些style与Template保存在不同的xaml文件中,通过动态资源机制来实现换肤;
MSDN中重写控件的所有Demo:
http://msdn.microsoft.com/zh-cn/library/ms771693.aspx
2. 换整个主题,可以有xp、Vista 等主题,代码可以参考如下的博客:
http://www.cnblogs.com/xmlspy/archive/2008/08/07/1262486.html
http://www.cnblogs.com/nawind/articles/1304179.html