原文 http://www.cnblogs.com/channingzhao/archive/2013/04/11/3013619.html
新手用WPF山寨QQ管家7.6(一)
http://www.cnblogs.com/channingzhao/archive/2013/04/10/3012587.html
接着上次的来
2.导航最大最小关闭按钮的制作:
效果展示
写一个Border,BorderThickness="1,0,0,0",只有左边有线条,Border内放关闭按钮图片,接着设计好背景渐进颜色并透明,构成按钮控件,在故事版里做MouseOver和Pressed效果,这里需要做成时间渐变。
关闭按钮样式代码
最大化按钮MouseOver是红色的,而且比其他按钮宽一些。
最大化按钮样式代码
图标素材.rar 图标是自己从管家上扣的...效果不是立体的,也能用,我实在找不到这种小图标了。
3.登录管家按钮的制作:
效果展示
这个按钮用到了图形间的组合,是一个圆角Rectangle和一个Ellipse排斥组合而成。
先画一个Rectangle,再在上面画一个Ellipse,圈住两个图形,选择对象->合并->排斥,就能做出上面的效果了,空圈放图片,按钮效果同上。
4. 皮肤选择层的制作:
效果展示
资产->形状里有三角形,用它和圆角巨型组合出底层形状(相并),并构成ScrollViewer控件,在ScrollViewer内添加WrapPanel用于放3*3张图片。
皮肤选择层代码
皮肤选择层样式代码
5. 换肤的实现:
定义ResourceHelper类:
1 static class ResourceHelper 2 { 3 public static void LoadResource(string fileName) 4 { 5 Application.Current.Resources.MergedDictionaries[0] = new ResourceDictionary() 6 { 7 Source = new Uri(fileName,UriKind.RelativeOrAbsolute) 8 }; 9 } 10 }
不同的皮肤分别为不同的Style.xaml
1 <Application.Resources> 2 <ResourceDictionary> 3 <ResourceDictionary.MergedDictionaries> 4 <ResourceDictionary Source="Theme/Theme8.xaml"/> 5 </ResourceDictionary.MergedDictionaries> 6 </ResourceDictionary> 7 </Application.Resources>
换肤按钮事件:
1 private void ThemeImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 2 { 3 Image image = sender as Image; 4 if (image != null && image.Source != null) 5 { 6 string imgName = image.Name; 7 ResourceHelper.LoadResource("pack://application:,,,/项目名;component/Theme/" + imgName + ".xaml"); 8 } 9 }
我的每个Theme.xaml目前只有背景图和导航字色变化:
Theme.xaml内:
<ImageBrush x:Key="WindowBack" ImageSource="../Resource/Image/b8.jpg" Stretch="UniformToFill"/>
MainWindow内:
Background="{DynamicResource WindowBack}"
换肤的时候DynamicResource会跟着换,StaticResource不会。
直接修改样式文件内的元素会提示只读,百度了下也只有换肤能做,不知道其他办法~
我的换肤是临时的,保存不了,重运行就恢复,不知道怎么解决呀~在此请教下高手们...