创建 WPF 不规则窗口 方法之一

转载 2012年03月21日 09:49:15

  相对于用MFC创建不规则窗口,WPF创建不规则窗体的过程就显得相当享受了,原理清晰、实现简单。

  下面图片就是演示程序运行效果:

  

  

         图1 :镂空的灰太狼

 

  我们的灰太狼先生漂浮在了我的blog编辑器上面;右上角放了一个可以关闭程序的按钮;通过鼠标可以拖动灰太狼(窗口)。 

 

  基本分两步就可以轻松实现上面的不规则窗体效果:

  1、背景窗口设置

          a、将窗口的 WindowStyle 设置成 "None" ,这样就把 Title bar 去掉了;

      b、将窗口的 AllowsTransparency 设置成 "True" ,允许透明化处理;

          c、将窗口的 Background 设置成 "Transparent" ,就是把背景设置成透明色。

 

  2、显示元素的添加

          这就很简单了,把你要显示的元素添加进去就行了。最常见的就是加一个不规则的图片作为背景,然后在上面甚至“外面”添加其他元素,所谓“外面”,现实的效果就是悬浮在外部了。

 

下面是代码:

Xaml文件:

 

<Window 
    
x:Class="NonRectangularWindow.Window1"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    Title
="不规则窗口演示"
    SizeToContent
="WidthAndHeight" 
    MouseLeftButtonDown
="Window_MouseLeftButtonDown"
    WindowStyle
="None" AllowsTransparency="True" Background="Transparent">
    
<Grid Width="550" Height="450">
        
<!--非矩形区域元素-->
        
<Image Source="/NonRectangularWindow;component/灰太狼1.png"></Image>
        
<Button  Width="60" Height="40" Click="btnClose_Click" Margin="465,23,25,387">关闭</Button>
    
</Grid>
</Window>

 

后台C#代码:

 

using System;
using System.Windows;
using System.Windows.Input;

namespace NonRectangularWindow
{
    
public partial class Window1 : Window
    {
        
public Window1()
        {
            InitializeComponent();
        }

        
void btnClose_Click(object sender, RoutedEventArgs e)
        {
            
this.Close();
        }

        
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            
this.DragMove();
        }
    }
}

 

 

 源代码:

  点击这里下载本示例程序的源码。

  注:本示例程序需要VS2010、.net framework3.0及以上才能运行。

 

 

 

  由于镂空后有很多边刺和杂色,加入OuterGlowBitmapEffect效果是个不错的选择,按照一楼的提示,修改后的结果如下:

        

                       图2:以深色桌面为背景的改进版

 

Xaml如下:

 

<Window 
    
x:Class="NonRectangularWindow.Window1"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    Title
="不规则窗口演示"
    SizeToContent
="WidthAndHeight" 
    MouseLeftButtonDown
="Window_MouseLeftButtonDown"
    WindowStyle
="None" AllowsTransparency="True" Background="Transparent">
    
<Grid Width="550" Height="450">
        
<!--非矩形区域元素-->
        
<Image Source="/NonRectangularWindow;component/灰太狼1.png">
            
<Image.BitmapEffect>
                
<OuterGlowBitmapEffect GlowColor="White" GlowSize="3"/>
            
</Image.BitmapEffect>
        
</Image>
        
<Button  Width="60" Height="40" Click="btnClose_Click" Margin="465,23,25,387">关闭</Button>
        
<TextBlock Height="23" HorizontalAlignment="Left" Margin="395,151,0,0" Name="textBlock1" Text="HE YuanHui" VerticalAlignment="Top">
            
<TextBlock.BitmapEffect>
                
<OuterGlowBitmapEffect/>
            
</TextBlock.BitmapEffect>
        
</TextBlock>
        
<TextBlock Height="23" HorizontalAlignment="Left" Margin="413,180,0,0" Name="textBlock2" Text="2010年4月29日" VerticalAlignment="Top">            <TextBlock.BitmapEffect>
                
<OuterGlowBitmapEffect/>
            
</TextBlock.BitmapEffect>
        
</TextBlock>
        
<TextBlock Height="23" HorizontalAlignment="Left" Margin="413,209,0,0" Name="textBlock3" Text="All rights reserved." VerticalAlignment="Top"><TextBlock.BitmapEffect><OuterGlowBitmapEffect /></TextBlock.BitmapEffect></TextBlock>
    
</Grid>
</Window>

 

 修改后的源码下载:

  在这里下载

      请在这里下载VS2008/VS2010版源代码

 

作者:khler

原文出处:http://www.cnblogs.com/khler/archive/2010/04/29/1723610.html

 

相关文章推荐

android 自定义button背景图片及事件——自定义控件学习(一)

自定义控件 android 自定义button背景图片及事件——自定义控件学习(一)

WPF实现不规则窗体(C#)

见到一些游戏的客户端窗口,形状是不规则的,一直觉得很炫。就想用winform做一个玩下,思路就是:去掉标题栏,用一张透明背景色的图片作为Form的背景。可是在实现的过程中我却悲愤的发现,winform...

WPF创建不规则窗体并实现阴影效果

方法一:使用png图片作为窗体背景。 直接看代码好了:
  • Qian_F
  • Qian_F
  • 2014年06月06日 17:32
  • 5079

C++创建不规则窗口的方法

  • 2008年08月01日 12:26
  • 1KB
  • 下载

VC 不规则窗口创建

  • 2013年04月03日 22:35
  • 39KB
  • 下载

在windows上创建完美的不规则窗口

在windows上创建完美的不规则窗口不规则窗口方法简介windows上的窗口绝大多数是方形的,但是偶尔也会有一些其他形状的窗口,如圆形甚至不规则形状。这些不常见的窗口是如何做出来的呢? 有两种方法...
  • bjrxyz
  • bjrxyz
  • 2017年02月04日 19:01
  • 618

不规则区域窗口的创建

  • 2009年05月18日 10:32
  • 186KB
  • 下载

不规则窗口创建

  • 2017年11月17日 11:32
  • 13KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创建 WPF 不规则窗口 方法之一
举报原因:
原因补充:

(最多只允许输入30个字)