WPF中如何动态改变矩形Rectangle的渐变色

wucaihua2008 2009-07-20 06:33:41
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>

怎么添加代码?
...全文
1632 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kissyou886 2009-07-22
  • 打赏
  • 举报
回复
一一指定样式是一种解决办法,但是一个界面如果控件多的话,全部指定样式很麻烦.
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
jdbcodbc 2009-07-22
  • 打赏
  • 举报
回复
UP
wucaihua2008 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zyntl 的回复:]
这篇博客是专门解决这个问题的,希望对你有所帮助
http://www.cnblogs.com/zhouyinhui/archive/2007/08/02/840326.html
[/Quote]

我有下载过这例子的源码,运行之后,会出现小小的错误,无法解析资源styleBackground和styleBanner.....
zyntl 2009-07-21
  • 打赏
  • 举报
回复
这篇博客是专门解决这个问题的,希望对你有所帮助
http://www.cnblogs.com/zhouyinhui/archive/2007/08/02/840326.html
wucaihua2008 2009-07-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kissyou886 的回复:]
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里换肤的例子很多的
[/Quote]

在Click事件中,一一指定样式是一种解决办法,但是一个界面如果控件多的话,全部指定样式很麻烦.
google里换肤的例子大部分只是换某一个控件的背景,而非整个主题.

我在网上找了方法但是没效果.

ResourceDictionary resources = new ResourceDictionary();
resources.Source = new Uri("ResourceDictionaryGreen.xaml", UriKind.Relative);
Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(resources);

或者
ResourceDictionary resources = null;
using (FileStream fs = new FileStream("ResourceDictionaryGreen.xaml", FileMode.Open,
FileAccess.Read))
{
resources = (ResourceDictionary)XamlReader.Load(fs);
}

有哪位高手知道的,请指教下
kissyou886 2009-07-20
  • 打赏
  • 举报
回复
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里换肤的例子很多的

17,747

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧