惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
B
Blog RSS Feed
博客园_首页
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google DeepMind News
Google DeepMind News
D
Docker
Blog — PlanetScale
Blog — PlanetScale
M
MIT News - Artificial intelligence
C
Check Point Blog
The Cloudflare Blog
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
量子位
The GitHub Blog
The GitHub Blog
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
T
The Blog of Author Tim Ferriss
博客园 - 【当耐特】
Vercel News
Vercel News
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
博客园 - 司徒正美

博客园 - 找事的狐狸

“摸”电脑的时代(三):解析Surface内部结构 “摸”电脑的时代(二):多点触摸秀 写于Silverlight整装待发之际(八):也谈Silverlight人才招聘策略 WinHec扫盲贴 《WPF揭秘》勘误表 如何隐藏UpdatePanel 支付宝实名制实现思路 程序员的必备装备——为健康加油 [好书推荐] C#和.NET 2.0实战:平台、语言与框架 老调重弹——你存储的密码做Hash了吗? JavaScript的世界从来没有像现在这样精彩 CSS实现不同的打印和屏幕显示结果 [翻译] Vista中的音量II: Windows Vista音量种类 文件加密的简单实现(C语言) 如何检测是否安装了.NET 2.0和.NET 3.0 闲话WPF近期发展 浅析Family Show 2.0的子窗体实现 WPF实现Tag Cloud 浅析Family Show 2.0的数据结构及基本算法
如何实现一个不规则形状的WPF窗口
数字游民托尼 · 2007-08-04 · via 博客园 - 找事的狐狸

在WPF中要实现不规则形状的窗口其实很简单,首先我们要设置几个Window的属性,如下:

<Window x:Class="BorderlessWindow.Window1"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title
="BorderlessWindow" Height="300" Width="300"
        WindowStyle
="None" Background="{x:Null}" AllowsTransparency="True"
    
>

这里我们设置了WindowStyle="None",这表示去掉窗口的边框和标题栏;Background="{x:Null}"表示背景为透明,这一步必须做,因为默认的背景色是白色的;AllowsTransparency="True"是与WindowsStyle.None配合使用的,如果你在此时把WindowStyle="None"去掉,会收到一个错误。

在主窗口中,我们可以放入以下一段代码:

    <Grid>
    
<Border CornerRadius="5,5,5,5" Background="#FF777777" Height="Auto"> </Border>
    
</Grid>

这表示一个带有圆弧弯角的矩形,运行结果如下所示:

但这样是不是就实现了呢?当然不是,现在运行窗口你会发现一些问题——无法拖动、无法关闭。不过不用担心,实现这些功能并不难,因为Window提供了相应的函数来实现拖动和关闭——DragMove和Close。

拖动的话,我们可以为Window添加一个MouseLeftButtonDown的事件处理程序,并在里面调用DragMove就可以了(不需要任何参数):

        public void DragWindow(object sender, MouseButtonEventArgs args)
        
{
            
this.DragMove();
        }

至于关闭,我们可以添加一个按钮,然后在Click事件处理程序中调用Close:

        public void CloseWindow(object sender, RoutedEventArgs args)
        
{
            
this.Close();
        }

最后的实现效果如下:

为了让关闭按钮更别致些,我对Button的Template做了重载(不过这不是重点)。

完整的实现,大家自己看代码吧。点击这里下载代码