• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Trae
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Tony Qu
我的软件工作室
博客园    首页    新随笔    联系   管理     

如何实现一个不规则形状的WPF窗口

在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做了重载(不过这不是重点)。

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


版权声明:本文由作者Tony Qu原创, 未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
posted @ 2007-08-04 08:02  找事的狐狸  阅读(5558)  评论(7)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3