C# WPF 建立无边框(标题栏)的登录窗口的示例

下面是C#WPF建立无边框(标题栏)的登录窗口的完整攻略,包含两条示例。

1. 在XAML中设置窗口样式

我们可以在XAML文件中设置窗口的样式。首先,我们需要设置窗口的ResizeMode属性为NoResize,这将禁用窗口的缩放功能。接着,我们可以设置窗口Chrome样式为None,这将清除窗口的默认边框,而且我们需要手动添加窗口的标题栏和关闭按钮。

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        WindowStyle="None" ResizeMode="NoResize">

        <!--添加一个Grid容器-->
        <Grid>

            <!--添加窗口的标题栏-->
            <Grid Background="Gray">
                <TextBlock Margin="5" FontSize="20" Foreground="White" VerticalAlignment="Center">LOGIN</TextBlock>
                <Button x:Name="BtnClose" Margin="5" Width="30" Height="30" VerticalAlignment="Center" HorizontalAlignment="Right" Content="X" FontSize="16" Background="Red" Foreground="White" Click="BtnClose_Click"/>
            </Grid>

            <!--添加登录表单-->
            <Grid Margin="20">
                <Label Content="Username" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <TextBox Margin="0 5 0 0" Width="200" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <Label Content="Password" Margin="0 30 0 0" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <PasswordBox Margin="0 35 0 0" Width="200" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                <Button Margin="0 70 0 0" Width="100" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Content="Login"/>
            </Grid>

        </Grid>
</Window>

在上面的代码中,我们通过设置WindowStyle为None来隐藏窗口的默认边框。接着,我们在XAML布局中手动添加了一个Grid容器,这个容器包含了一个标题栏和登录表单两个部分。标题栏使用红色背景和白色文本,并且添加了一个关闭按钮。登录表单使用了标准的WPF布局元素。

在按钮的Click事件处理程序中,我们需要添加关闭窗口的代码:

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

这个示例的完整代码可以在Github上找到:https://github.com/hellowworld-exe/WPF-Login-Window-Without-Border

2. 通过代码控制窗口移动和关闭

除了使用XAML的方式设置窗口样式之外,我们还可以通过代码来使窗口可拖动和关闭。我们可以使用MouseMove事件,当用户按下鼠标左键并拖动窗口时,改变窗口的位置信息。我们还需要添加一些逻辑来实现窗口的关闭。

public partial class MainWindow : Window
{
    private bool isMouseDown = false;
    private Point mouseOffset;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        isMouseDown = true;
        mouseOffset = e.GetPosition(null);
    }

    private void Grid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        isMouseDown = false;
    }

    private void Grid_MouseMove(object sender, MouseEventArgs e)
    {
        if (isMouseDown)
        {
            Point point = e.GetPosition(null);
            double dx = point.X - mouseOffset.X;
            double dy = point.Y - mouseOffset.Y;

            this.Left += dx;
            this.Top += dy;

            mouseOffset = point;
        }
    }

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

在这个示例中,我们在窗口的Grid容器添加了MouseMove、MouseLeftButtonDown和MouseLeftButtonUp事件的处理程序。当用户按下鼠标左键并开始拖动窗口时,我们必须保存鼠标指针的位置(mouseOffset),并将isMouseDown变量设置为true。在MouseMove事件中,我们先判断isMouseDown是否为true,如果是就改变窗口的Left和Top属性,这样就可以使窗口跟随鼠标移动了。

这个示例的完整代码可以在Github上找到:https://github.com/hellowworld-exe/WPF-Login-Window-With-Move-and-Close

以上就是C#WPF建立无边框(标题栏)的登录窗口的完整攻略,希望能对开发者们提供帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# WPF 建立无边框(标题栏)的登录窗口的示例 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C#数值转换-显式数值转换表(参考)

    C#数值转换 – 显式数值转换表(参考) 在C#中,可以使用显式数值转换实现不同类型之间的转换。在进行显式数值转换时,需要使用类型转换运算符,也可以使用Convert或Parse方法。 本文提供了一个显式数值转换表,包含了常见的数值类型,以及它们之间的转换示例。 显式数值转换表 From DataType To DataType Type Conversio…

    C# 2023年5月15日
    00
  • 分享两种实现Winform程序的多语言支持的多种解决方案

    接下来我将详细讲解Winform程序实现多语言支持的多种解决方案。 1. 利用Resx文件实现多语言支持 Resx文件是.NET中专门用于多语言支持的文件格式,可以用来存储不同语言的文本信息,在程序中通过读取Resx文件来实现不同语言的界面显示。 1.1 创建Resx文件 创建Resx文件有多种方式,这里以Visual Studio为例。 在Visual S…

    C# 2023年6月7日
    00
  • c#哈希算法的实现方法及思路

    C#哈希算法的实现方法及思路攻略 什么是哈希算法? 哈希算法是一种将任意长度的数据映射为固定长度值的算法,这种映射关系称为哈希值或散列值。哈希值通常用一个十六进制字符串表示,其长度与算法常量有关。哈希算法被广泛应用于数据完整性校验、密码存储等场景中。 哈希算法的实现思路 哈希算法的实现思路可以被概括为以下几步: 选择合适的哈希函数:哈希函数是哈希算法的核心,…

    C# 2023年6月6日
    00
  • cryptohack wp day(1)

    就从头开始吧 第一题 (ASCII) 一道简单的ASCII码转换,直接用题目的提示代码解就行了 ascii=[99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114, 49, 110, 116, 52, 98, 108, 51, 125] flag=”” for i in asci…

    C# 2023年5月8日
    00
  • C#开发中常用的加密解密方法汇总

    C#开发中常用的加密解密方法汇总 本文将介绍一些在C#开发中常用的加密解密方法,包括对称加密、非对称加密、哈希函数等。这些方法可以用于数据安全存储、传输以及验证等场合。 对称加密 对称加密算法使用相同的密钥进行加密和解密,主要有以下几种常用方法: 1. DES加密算法 DES加密算法是一种对称加密算法,具有较高的安全性能。下面是一个简单的DES加密示例: u…

    C# 2023年6月7日
    00
  • C# BinaryReader实现读取二进制文件

    下面是“C# BinaryReader实现读取二进制文件”的完整攻略: 1. 什么是BinaryReader BinaryReader是C#中的一个类,它可以帮助我们快速读取二进制文件中的数据。BinaryReader提供了一系列方法,以便我们能够读取基本类型的数据(如int、float、double等)和字符串等其他类型的数据。我们可以使用BinaryRe…

    C# 2023年6月1日
    00
  • .NET Core中RabbitMQ使用死信队列的实现

    针对“.NET Core中RabbitMQ使用死信队列的实现”这个话题,我将提供以下完整攻略步骤: 1. RabbitMQ死信队列基础概念 死信队列(Dead Letter Queue, DLQ)是一种特殊的队列,用于存储无法被消费者所处理的消息。当消息不能被正确地路由或消费者拒绝消费时,它们将会被投递到死信队列中。通常情况下,死信队列的作用是对失败的消息进…

    C# 2023年6月3日
    00
  • C#解析JSON实例

    下面是详细讲解“C#解析JSON实例”的完整攻略: 什么是JSON JSON(JavaScript Object Notation)是一种数据格式,用于交换数据。它比XML更容易阅读,也更容易解析。JSON数据格式由键值对构成,键和值之间用冒号分隔,值的数据类型可以是字符串,数字,布尔值,数组,对象等。例如: { "name": &quo…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部