[引用:]http://blog.csdn.net/johnsuna/article/details/1893319

 

众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBorderStyle属性设置为None来完成。
如果要制作成异形窗体,则需要使用图片或者使用GDI+自定义绘制。

那么,在WPF中,我们怎样制作一个无边框窗体呢?

答案是将Window的WindowStyle属性设置为None,即WindowStyle="None" 。如果是非矩形的异形窗体,则需要将背景设为Null,将允许透明设置为True,也就是:Background="{x:Null}"  AllowsTransparency="True",可能有些人还希望这个窗口可以拖来拖去,那么,就还需要设置MouseLeftButtonDown事件,比如:MouseLeftButtonDown="DragWindow",这里DragWindow由Window的DragMove()来完成。想关闭窗口?那就自己做一个按钮,然后使用Window本身的Close()方法吧。

下面是效果:

这里右上角有个圆形的X按钮,是用Button,但将它的样式设置成了圆角矩形制作的。具体代码见下:
XAML代码:
// Window1.xaml
<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"
  MouseLeftButtonDown="DragWindow"
    >
 <Window.Resources>
  <Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
   <Setter Property="Foreground" Value="White"/>
   <Setter Property="Template">
    <Setter.Value>

<!--设置样式 -->
     <ControlTemplate TargetType="{x:Type Button}">
      <Grid>
       <Rectangle x:Name="Rectangle" Stroke="#FFFFFFFF" StrokeMiterLimit="1.000000" StrokeThickness="0.500000" RadiusX="10" RadiusY="10" Fill="#FF777777">
       </Rectangle>
       <ContentPresenter x:Name="ContentPresenter" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                         VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True"/>
      </Grid>
<!-- 设置鼠标移到关闭按钮上的效果 -->
      <ControlTemplate.Triggers>
       <Trigger Property="IsMouseOver" Value="true">
        <Setter Property="Fill" TargetName="Rectangle">
         <Setter.Value>
          <SolidColorBrush Color="White"></SolidColorBrush>
         </Setter.Value>
        </Setter>
        <Setter Property="Foreground" Value="Black"></Setter>
       </Trigger>       
      </ControlTemplate.Triggers>
     </ControlTemplate>
    </Setter.Value>
   </Setter>
  </Style>
 </Window.Resources>
<!-- 窗体中的内容 -->
 <Grid>
<!-- 
窗体的边框,底色设置,注意将CornerRadius与左上角“X”叉形按钮的设置保持一致或约大于叉形按钮的RadiusX/Y设置 -->
 <Border CornerRadius="10,10,10,10" Background="Orange" Height="Auto" BorderBrush="Teal" BorderThickness="1"> </Border>

<!--左上角的“X”叉形按钮-->
 <Button Name="Button1" Style="{StaticResource ButtonStyle}" Click="CloseWindow" Width="15" Height="15" Content="X" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="3,3,3,3"></Button>

<Button Height="23" Margin="96,101,121,0" Name="button2" VerticalAlignment="Top">Test Button</Button>
  </Grid>
</Window>

C#代码:
// Window1.xaml.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace BorderlessWindow
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>

public partial class Window1 : System.Windows.Window
    {

public Window1()
        {
            InitializeComponent();
        }

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

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

01.WPF中制作无边框窗体的更多相关文章

  1. WPF中制作无边框窗体

    原文:WPF中制作无边框窗体 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBorderStyle属性设置为None来完成.如果要制作成异形窗体,则需要使用图片或者使用G ...

  2. winform程序中为无边框窗体手动添加窗体拖动代码

            Point oldMousePoint;//记录开始移动窗口前鼠标点下箭头的位置        Point oldFormPoint;//记录开始移动窗口前窗体位置        // ...

  3. WPF圆角透明无边框窗体

    <Window x:Class="ImportData.MainWindow" xmlns="http://schemas.microsoft.com/winfx/ ...

  4. 【转】【WPF】 WPF 调用API修改窗体风格实现真正的无边框窗体

    WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm中无边框窗体的样式.但是AllowTransparency ...

  5. WPF 调用API修改窗体风格实现真正的无边框窗体

    原文:WPF 调用API修改窗体风格实现真正的无边框窗体 WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm ...

  6. 利用WPF创建含多种交互特性的无边框窗体

    咳咳,标题一口气读下来确实有点累,让我先解释一下.另外文章底部有演示程序的下载. 本文介绍利用WPF创建一个含有以下特性的窗口: 有窗口阴影,比如QQ窗口外围只有几像素的阴影: 支持透明且无边框,为了 ...

  7. 使用WPF创建无边框窗体

    一.无边框窗口添加窗口阴影 实际上在WPF中添加无边框窗口的窗口阴影十分简单. 首先,设置WindowStyle="None"以及AllowsTransparency=" ...

  8. 2017-4-26 winform tab和无边框窗体制作

    TabIndex-----------------------------------确定此控件将占用的Tab键顺序索引 Tabstop-------------------------------指 ...

  9. wpf无边框窗体移动和大小调整

    原文:wpf无边框窗体移动和大小调整   using System; using System.Windows; using System.Windows.Interop; namespace Wpf ...

随机推荐

  1. Prefixes and Suffixes

    Codeforces Round #246 (Div. 2) D:http://codeforces.com/contest/432/problem/D 题意:给你一个长度不超过10^5的字符串.要你 ...

  2. Feel Good

    poj2796:http://poj.org/problem?id=2796 题意:给出一个长度为n(n<100000)的序列,求出一个子序列,使得这个序列中的最小值乘以这个序列的和的值最大. ...

  3. bzoj2733

    好久没写treap,稍微练练treap的启发式合并 ; ..,..] of longint; root,a,b,fa,count,f:..] of longint; j,n,m,k,x,y,i:lon ...

  4. WordPress Download Monitor插件跨站脚本漏洞

    漏洞名称: WordPress Download Monitor插件跨站脚本漏洞 CNNVD编号: CNNVD-201308-139 发布时间: 2013-08-14 更新时间: 2013-08-14 ...

  5. MyEclipse 设置字体

    过了好几年,又开始用myeclipse  都忘了,  这里贴图用于记录 1.打开window - preferences . 2.打开General-Appearance-Colors and Fon ...

  6. 游戏开发设计模式之对象池模式(unity3d 示例实现)

    前篇:游戏开发设计模式之命令模式(unity3d 示例实现) 博主才学尚浅,难免会有错误,尤其是设计模式这种极富禅意且需要大量经验的东西,如果哪里书写错误或有遗漏,还请各位前辈指正. 原理:从一个固定 ...

  7. 锐浪应用小插曲,asp.net下的使用

    下午提前完成了今天的工作内容,整了下bs中的应用,嘿嘿,其中遇到不少问题,接下来说下大概会遇到哪些问题,1:grid++ 6.0插件下载安装之后ie浏览器无法打开,居然什么都没有显示,奇葩啊,系统版本 ...

  8. GPUImage实现过程

    GPUImage就是一个函数的类库,用于对图片实现滤镜的效果. 下面是实现一个最简单的GPUImage的程序和讲解: 首先新建一个项目,导入GPUImage类库(导入过程在我的另一个博客里面有写). ...

  9. Sorting Algorithm

    sorting 应该是最容易被考到的东西,自己老是学了背,背了忘.为了方便复习,这里进行总结 1. Bubble Sort 定义:每两个两个比较,每扫完一次,当前扫过的最大值放在了末尾. for i ...

  10. Properties/Property文件读取(键值均)乱码问题!

    方法一:使用native2ascii进行转码,这个不做说明,客户不可能帮你转码的. 方法二:当键是因为时直接getProperty即可,但加载后的propertis对象里的键也是中文乱码,就无法通过g ...