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

yizhihongxing

下面是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#的dataset离线数据集示例

    下面是“C#的dataset离线数据集示例”的完整攻略: 什么是 dataset? dataset是C#语言中数据存储和管理的一种对象,它可以在离线状态下对数据进行操作,而不需要一直与数据库保持连接。使用dataset可以查询、修改、删除和插入数据等操作。dataset由多个DataTable组成,每个DataTable代表一个数据表格。 创建 datase…

    C# 2023年6月2日
    00
  • 怎么利用c#修改services的Startup type

    要利用C#修改Windows服务的启动类型(Startup type),可以使用.NET Framework下的ServiceController和ServiceType类。步骤如下: 步骤一:添加引用 在项目中添加System.ServiceProcess引用。 步骤二:获取服务 使用ServiceController类获取要修改的服务,可以用服务名称或服…

    C# 2023年6月6日
    00
  • .Net Core读取文件时中文乱码问题的解决方法分享

    .NET Core读取文件时中文乱码问题的解决方法分享 在使用.NET Core读取含有中文字符的文件时,有时会出现中文字符乱码的问题。这是因为在不同的编码方式下,中文字符会以不同的方式表示。本文将详细介绍读取文件时中文乱码问题的解决方法,并提供两个示例。 问题分析 先来看一个示例: string contents = System.IO.File.Read…

    C# 2023年6月3日
    00
  • .NET Core Web APi类库内嵌运行的方法

    以下是“.NET Core Web API类库内嵌运行的方法”的完整攻略: 什么是.NET Core Web API类库内嵌运行 .NET Core Web API类库内嵌运行是一种机制,它允许您将.NET Core Web API类库嵌入到其他应用程序中,并在应用程序中运行它们。这种机制可以使您的应用程序更加灵活和可扩展。 .NET Web API类库内嵌…

    C# 2023年5月12日
    00
  • 如何使用C# Stopwatch 测量微秒级精确度

    使用C# Stopwatch测量微秒级精确度的完整攻略如下: 步骤 1:导入命名空间 首先,在代码文件的顶部,添加System.Diagnostics 命名空间,以便使用 Stopwatch 类: using System.Diagnostics; 步骤 2:初始化 Stopwatch 创建 Stopwatch 类示例,并调用 Start 方法(或 Rest…

    C# 2023年5月15日
    00
  • 聊聊JS动画库 Velocity.js的使用

    下面是关于“聊聊JS动画库 Velocity.js的使用”的完整攻略: 什么是 Velocity.js Velocity.js是一款快速、高效、可扩展的动画库,由 Github 上的一个开发者编写。可以用它来对DOM元素进行各种复杂的动画操作,以增强用户体验。 安装 Velocity.js 你可以在官网上找到 Velocity.js 的CDN链接, 或者通过…

    C# 2023年6月1日
    00
  • 利用C#实现获取当前设备硬件信息

    利用C#实现获取当前设备硬件信息 在C#语言中,可以使用System.Management命名空间下的ManagementObject和ManagementClass来获取设备的硬件信息。下面分步骤讲解如何利用C#实现获取当前设备的硬件信息: 1. 引入System.Management命名空间 在代码中引入System.Management命名空间,如下所…

    C# 2023年6月7日
    00
  • C# WinForm中禁止改变窗口大小的方法

    我来为你详细讲解“C# WinForm中禁止改变窗口大小的方法”。 方法一:设置FormBorderStyle为FixedDialog 在C# WinForm中,我们可以使用FormBorderStyle来设置窗口的边框样式,其中包含一个值为FixedDialog,这个样式的窗口大小是不可改变的。我们只需要在窗口的初始化代码中设置FormBorderStyl…

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