您的位置:首页 > 其它

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

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: