wpf任务
2015-05-31 10:29
239 查看
一、窗口效果1.窗口阴影需要将窗口样式添加到 App.xaml 中
<Style x:Key="for_noresize_window" TargetType="{x:Type Window}"> <Setter Property="AllowsTransparency" Value="true"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="FontFamily" Value="Consolas, Microsoft YaHei"/> <Setter Property="FontSize" Value="24"/> <Setter Property="ResizeMode" Value="NoResize"/> <Setter Property="WindowStyle" Value="None"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Window}"> <Grid Margin="10"> <Rectangle Fill="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" RadiusX="5" RadiusY="5"> <Rectangle.Effect> <DropShadowEffect BlurRadius="10" ShadowDepth="0"/> </Rectangle.Effect> </Rectangle> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Margin}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" CornerRadius="5"> <ContentPresenter /> </Border> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
<Window x:Class="TestProject.Windows.NoResizeWithShadowEffect" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Background="Transparent" Height="500" Width="500" Title="NoResizeWithShadowEffect" WindowStartupLocation="CenterScreen" Style="{StaticResource for_noresize_window}"> <Grid> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <Label Content="NoResizeWithShadowEffect" Foreground="Olive"/> <TextBlock Text=""/> <Button Padding="20,5" Content="Close Window" Click="Clicked"/> <x:Code> <![CDATA[ void Clicked(object sender, RoutedEventArgs e) { this.Close(); } ]]> </x:Code> </StackPanel> </Grid> </Window>2.自定义最大化、最小化、关于我们3.滑动效果4.透明窗口5.自定义菜单首先用C#实现效果:新建一个类,定义一个颜色配置类,目前这里只是罗列了各个部分的颜色,大家可以进行保存读取等操作,来实现换肤的效果。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; namespace WindowsApplication1 { public class ColorConfig { private Color _fontcolor = Color.White; /// <summary> /// 菜单字体颜色 /// </summary> public Color FontColor { get { return this._fontcolor; } set { this._fontcolor = value; } } private Color _marginstartcolor = Color.FromArgb(113, 113, 113); /// <summary> /// 下拉菜单坐标图标区域开始颜色 /// </summary> public Color MarginStartColor { get { return this._marginstartcolor; } set { this._marginstartcolor = value; } } private Color _marginendcolor = Color.FromArgb(58, 58, 58); /// <summary> /// 下拉菜单坐标图标区域结束颜色 /// </summary> public Color MarginEndColor { get { return this._marginendcolor; } set { this._marginendcolor = value; } } private Color _dropdownitembackcolor = Color.FromArgb(34, 34, 34); /// <summary> /// 下拉项背景颜色 /// </summary> public Color DropDownItemBackColor { get { return this._dropdownitembackcolor; } set { this._dropdownitembackcolor = value; } } private Color _dropdownitemstartcolor = Color.Orange; /// <summary> /// 下拉项选中时开始颜色 /// </summary> public Color DropDownItemStartColor { get { return this._dropdownitemstartcolor; } set { this._dropdownitemstartcolor = value; } } private Color _dorpdownitemendcolor = Color.FromArgb(160,100,20); /// <summary> /// 下拉项选中时结束颜色 /// </summary> public Color DropDownItemEndColor { get { return this._dorpdownitemendcolor; } set { this._dorpdownitemendcolor = value; } } private Color _menuitemstartcolor = Color.FromArgb(52, 106, 159); /// <summary> /// 主菜单项选中时的开始颜色 /// </summary> public Color MenuItemStartColor { get { return this._menuitemstartcolor; } set { this._menuitemstartcolor = value; } } private Color _menuitemendcolor = Color.FromArgb(73, 124, 174); /// <summary> /// 主菜单项选中时的结束颜色 /// </summary> public Color MenuItemEndColor { get { return this._menuitemendcolor; } set { this._menuitemendcolor = value; } } private Color _separatorcolor = Color.Gray; /// <summary> /// 分割线颜色 /// </summary> public Color SeparatorColor { get { return this._separatorcolor; } set { this._separatorcolor = value; } } private Color _mainmenubackcolor = Color.Black; /// <summary> /// 主菜单背景色 /// </summary> public Color MainMenuBackColor { get { return this._mainmenubackcolor; } set { this._mainmenubackcolor = value; } } private Color _mainmenustartcolor = Color.FromArgb(93, 93, 93); /// <summary> /// 主菜单背景开始颜色 /// </summary> public Color MainMenuStartColor { get { return this._mainmenustartcolor; } set { this._mainmenustartcolor = value; } } private Color _mainmenuendcolor = Color.FromArgb(34, 34, 34); /// <summary> /// 主菜单背景结束颜色 /// </summary> public Color MainMenuEndColor { get { return this._mainmenuendcolor; } set { this._mainmenuendcolor = value; } } private Color _dropdownborder = Color.FromArgb(40, 96, 151); /// <summary> /// 下拉区域边框颜色 /// </summary> public Color DropDownBorder { get { return this._dropdownborder; } set { this._dropdownborder = value; } } } }新建一个类,我们从ToolStripProfessionalRenderer继承一个Render
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Drawing.Drawing2D; namespace WindowsApplication1 { public class MyMenuRender : ToolStripProfessionalRenderer { ColorConfig colorconfig = new ColorConfig();//创建颜色配置类 /// <summary> /// 渲染整个背景 /// </summary> /// <param name="e"></param> protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) { e.ToolStrip.ForeColor = colorconfig.FontColor; //如果是下拉 if (e.ToolStrip is ToolStripDropDown) { e.Graphics.FillRectangle(new SolidBrush(colorconfig.DropDownItemBackColor), e.AffectedBounds); } //如果是菜单项 else if (e.ToolStrip is MenuStrip) { Blend blend = new Blend(); float[] fs = new float[5] { 0f, 0.3f, 0.5f, 0.8f, 1f }; float[] f = new float[5] { 0f, 0.5f, 0.9f, 0.5f, 0f }; blend.Positions = fs; blend.Factors = f; FillLineGradient(e.Graphics, e.AffectedBounds, colorconfig.MainMenuStartColor, colorconfig.MainMenuEndColor, 90f, blend); } else { base.OnRenderToolStripBackground(e); } } /// <summary> /// 渲染下拉左侧图标区域 /// </summary> /// <param name="e"></param> protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) { FillLineGradient(e.Graphics, e.AffectedBounds, colorconfig.MarginStartColor, colorconfig.MarginEndColor, 0f, null); } /// <summary> /// 渲染菜单项的背景 /// </summary> /// <param name="e"></param> protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) { if (e.ToolStrip is MenuStrip) { //如果被选中或被按下 if (e.Item.Selected || e.Item.Pressed) { Blend blend = new Blend(); float[] fs = new float[5] { 0f, 0.3f, 0.5f, 0.8f, 1f }; float[] f = new float[5] { 0f, 0.5f, 1f, 0.5f, 0f }; blend.Positions = fs; blend.Factors = f; FillLineGradient(e.Graphics, new Rectangle(0, 0, e.Item.Size.Width, e.Item.Size.Height), colorconfig.MenuItemStartColor, colorconfig.MenuItemEndColor, 90f, blend); } else base.OnRenderMenuItemBackground(e); } else if (e.ToolStrip is ToolStripDropDown) { if (e.Item.Selected) { FillLineGradient(e.Graphics, new Rectangle(0, 0, e.Item.Size.Width, e.Item.Size.Height), colorconfig.DropDownItemStartColor, colorconfig.DropDownItemEndColor, 90f, null); } } else { base.OnRenderMenuItemBackground(e); } } /// <summary> /// 渲染菜单项的分隔线 /// </summary> /// <param name="e"></param> protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) { e.Graphics.DrawLine(new Pen(colorconfig.SeparatorColor), 0, 2, e.Item.Width, 2); } /// <summary> /// 渲染边框 /// </summary> /// <param name="e"></param> protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) { if (e.ToolStrip is ToolStripDropDown) { e.Graphics.DrawRectangle(new Pen(colorconfig.DropDownBorder), new Rectangle(0,0,e.AffectedBounds.Width-1,e.AffectedBounds.Height-1)); } else { base.OnRenderToolStripBorder(e); } } /// <summary> /// 渲染箭头 /// </summary> /// <param name="e"></param> protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) { e.ArrowColor = Color.Red;//设置为红色,当然还可以 画出各种形状 base.OnRenderArrow(e); } /// <summary> /// 填充线性渐变 /// </summary> /// <param name="g">画布</param> /// <param name="rect">填充区域</param> /// <param name="startcolor">开始颜色</param> /// <param name="endcolor">结束颜色</param> /// <param name="angle">角度</param> /// <param name="blend">对象的混合图案</param> private void FillLineGradient(Graphics g, Rectangle rect, Color startcolor, Color endcolor, float angle, Blend blend) { LinearGradientBrush linebrush = new LinearGradientBrush(rect, startcolor, endcolor, angle); if (blend != null) { linebrush.Blend = blend; } GraphicsPath path = new GraphicsPath(); path.AddRectangle(rect); g.SmoothingMode = SmoothingMode.AntiAlias; g.FillPath(linebrush, path); } } }新建一个组件,继承自MenuStrip,作为我们的自定义菜单
using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class <span style="background-color: rgb(255, 255, 255); ">MyMenu : MenuStrip</span> { public <span style="background-color: rgb(255, 255, 255); ">My</span>Menu() { InitializeComponent(); this.Renderer = new MyMenuRender();//设置渲染 } public MyMenu(IContainer container) { container.Add(this); InitializeComponent(); this.Renderer = new MyMenuRender();<span style="background-color: rgb(255, 255, 255); ">//设置渲染</span> } } }好了,编译项目,你会在左侧工具栏中看到MyMenu的组件,拖一个上去就可以使用了,其实直接设置自带的MenuStrip的Render属性也可以,比如设置弹出菜单的渲染
contextMenuStrip1.Renderer = new JRJMenuRender();
相关文章推荐
- Couchbase View
- 【整理】队列特征以及代码的实现
- 修改Fedora10显示语言
- Binary Tree Level Order Traversal II
- Android CTS 测试总结【转】
- 安装vnc
- 仅为了方便以后提交审核的时候能有参考
- Java 虚拟机
- 反射之简单实例
- App installation failed There was an internal API error.
- 自测3. 数组元素循环右移问题
- php转json格式出现中文的解决办法
- 第五次作业
- 指针1
- 指针1
- AVS+标准应用现状
- Android学习之路—新手学Android的体会!
- 利用Github建立你的个人网站
- 利用Github建立你的个人网站
- hdu1722 - cake