WPF 登录界面记录

界面: 

<Window x:Class="Fasetto.Word.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Fasetto.Word"
        mc:Ignorable="d"
        WindowStyle="None"
        AllowsTransparency="True"
        WindowStartupLocation="CenterScreen"
        x:Name="AppWindow"
        Icon="Images/logo2.jpeg"
        MinWidth="{Binding WindowMinNumWidth}"
        MinHeight="{Binding WindowMinNumHeight}"
        Title="Welcome friend!" Height="600" Width="900">
    <Window.Resources>
        <Style TargetType="{x:Type local:MainWindow}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Window}">
                        <Border  Padding="{Binding OuterMarginsizeThickness,FallbackValue=10}">
                            <Grid>
                                <Border x:Name="Container" 
                                        Background="{StaticResource BackgroundLightBrush}"
                                        CornerRadius="{Binding WindowCornerRadius,FallbackValue=10}"/>
                                <Border CornerRadius="{Binding WindowCornerRadius}" Background="{Binding ForegrounTophBrush,FallbackValue=White}">
                                    <Border.Effect>
                                        <DropShadowEffect ShadowDepth="0" Opacity="0.2"/>
                                    </Border.Effect>
                                </Border>

                                <Grid>
                                    <Grid.OpacityMask>
                                        <VisualBrush Visual="{Binding ElementName=Container}"/>
                                    </Grid.OpacityMask>

                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="{Binding TitleHeightGridLength,FallbackValue=42}"/>
                                        <RowDefinition Height="Auto"/>
                                        <RowDefinition Height="*"/>
                                    </Grid.RowDefinitions>
                                    <Grid  Grid.Column="0" Panel.ZIndex="1">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="Auto"/>
                                            <ColumnDefinition Width="*"/>
                                            <ColumnDefinition Width="Auto"/>
                                        </Grid.ColumnDefinitions>
                                        <!--Icon-->
                                        <Button Style="{StaticResource SystemIconButton}" Command="{Binding MenuComand}">
                                            <Image Source="/Images/logo2.jpeg"/>
                                        </Button>
                                        <!--Title-->
                                        <Viewbox Grid.Column="0" Grid.ColumnSpan="3" Margin="0">
                                            <!--<TextBlock  Style="{StaticResource HeaderText}" Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=Title,FallbackValue='WellCome,Friend!'}"/>-->
                                            <StackPanel>
                                                <TextBlock FontSize="{StaticResource FontSizeReguler}">
                                                    <Run Text="W" Foreground="{StaticResource workOrangeBrush}"/><Run Text="O" Foreground="{StaticResource workBlueBrush}"/><Run Text="R" Foreground="{StaticResource workRedBrush}"/><Run Text="D" Foreground="{StaticResource workGreenBrush}"/>
                                                </TextBlock>
                                                <TextBlock Text="by fasetto" Foreground="{StaticResource ForegroundDarkBrush}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                            </StackPanel>
                                        </Viewbox>
                                        <!--Window Buttons-->
                                        <StackPanel Grid.Column="2" Orientation="Horizontal">
                                            <Button Command="{Binding MinimzeComand}" Style="{StaticResource WindowControlButton}" Content="_" />
                                            <Button Command="{Binding MaximzeComand}" Style="{StaticResource WindowControlButton}" Content="[]" />
                                            <Button Command="{Binding CloseComand}" Style="{StaticResource windowCloseButton}" Content="x" />
                                        </StackPanel>
                                    </Grid>

                                    <Border Grid.Row="2">
                                        <Frame x:Name="MainFrame" Content="{Binding CurrentPage,Converter={local:ApplicationPageValueConverter}}"/>
                                        <!--<Border.Background>
                                            <ImageBrush TileMode="Tile" ViewboxUnits="Absolute" Viewport="0 0 500 500" ImageSource="/Images/Login.jpg"/>
                                        </Border.Background>-->
                                    </Border>
                                </Grid>
                            </Grid>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>

    <WindowChrome.WindowChrome>
        <WindowChrome
            ResizeBorderThickness="{Binding ResizeBorderThickness}"
            CaptionHeight="{Binding TitleHeight}"
            CornerRadius="0"
            GlassFrameThickness="0"
            />
    </WindowChrome.WindowChrome>

    <Grid Background="{StaticResource ForegroundLighBrush}">
        <Frame x:Name="MainFrame" Content="{Binding CurrentPage,Converter={local:ApplicationPageValueConverter}}"/>
    </Grid>
</Window>

<Page x:Class="Fasetto.Word.Page.LoginPageView"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:Fasetto.Word.Page"
      mc:Ignorable="d" 
    d:DesignHeight="700" d:DesignWidth="700"
      Title="LoginPageView">
    <Border Background="{StaticResource workBlueBrush}">
        <Grid>
            <Grid.Background>
                <ImageBrush ImageSource="/Fasetto.Word;component/Images/背景2.jpg" TileMode="Tile" Viewport="0,0,500,500" ViewboxUnits="Absolute"/>
            </Grid.Background>

            <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                <StackPanel
                    VerticalAlignment="Center"
                    HorizontalAlignment="Center"
                    TextBlock.TextAlignment="Center">

                    <Border Background="{StaticResource ForegroundLighBrush}" 
                            CornerRadius="10"
                            Padding="15 50 15 15"
                            Width="300"
                            Margin="50 50 50 50">

                        <StackPanel>
                            <TextBlock Text="Sign Up" FontSize="{StaticResource FontSizeLarge}" Foreground="{StaticResource workBlueBrush}"/>
                            <TextBlock Text="Is's about to get fun" FontSize="{StaticResource FontSizeReguler}" Foreground="{StaticResource ForegroundDarkBrush}"/>
                            <TextBox Tag="Emali"/>
                            <PasswordBox Tag="Password"/>

                            <Button Content="next" HorizontalAlignment="Center" />
                        </StackPanel>
                    </Border>
                    <Button Style="{StaticResource TextButton}" Content="I alreay have an account" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </StackPanel>
            </ScrollViewer>

        </Grid>
    </Border>
</Page>

样式:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:Fasetto.Word">

    <Style TargetType="{x:Type TextBlock}" x:Key="HeaderText" BasedOn="{StaticResource TextBlockStyle}">
        <Setter Property="Foreground" Value="{StaticResource ForegroundMainBrush}"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="Margin" Value="0 4"/>
    </Style>

    <Style  TargetType="{x:Type TextBox}" BasedOn="{StaticResource BaseStyle}">
        <Setter Property="FontSize" Value="{StaticResource FontSizeLarge}"/>
        <Setter Property="Padding" Value="10"/>
        <Setter Property="Margin" Value="0 5 0 5"/>
        <Setter Property="BorderBrush" Value="{StaticResource workBlueBrush}"/>
        <Setter Property="BorderThickness" Value="0 0 0 1"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TextBoxBase}">

                    <Grid>
                        <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                            <ScrollViewer x:Name="PART_ContentHost" Focusable="False" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
                        </Border>
                        <TextBlock IsHitTestVisible="False"
                                   Text="{TemplateBinding Tag}"
                                   x:Name="placeholder"
                                   Padding="{TemplateBinding Padding}"
                                   VerticalAlignment="Center"
                                   HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
                                   Foreground="{StaticResource ForegroundDarkBrush}">


                            <TextBlock.Style>
                                <Style TargetType="{x:Type TextBlock}">
                                    <Setter Property="Visibility" Value="Collapsed"/>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Text,RelativeSource={RelativeSource TemplatedParent}}" Value="">
                                            <Setter Property="Visibility" Value="Visible"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBlock.Style>
                        </TextBlock>
                    </Grid>


                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Opacity" TargetName="border" Value="0.56"/>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="BorderBrush" TargetName="border" Value="#FF7EB4EA"/>
                        </Trigger>
                        <Trigger Property="IsKeyboardFocused" Value="True">
                            <Setter Property="BorderBrush" TargetName="border" Value="#FF569DE5"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="PasswordBox">
        <Setter Property="FontSize" Value="{StaticResource FontSizeLarge}"/>
        <Setter Property="Padding" Value="10"/>
        <Setter Property="Margin" Value="0 5 0 5"/>
        <Setter Property="BorderBrush" Value="{StaticResource workBlueBrush}"/>
        <Setter Property="BorderThickness" Value="0 0 0 1"/>
        <Setter Property="local:PasswordBoxWaterMark.IsMonitoring" Value="true"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type PasswordBox}">
                    <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                        <Grid>
                            <ScrollViewer x:Name="PART_ContentHost" Focusable="False" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
                            <TextBlock x:Name="WaterMark" 
                                       Focusable="False" 
                                       IsHitTestVisible="False"
                                       Visibility="Collapsed" 
                                       Text="{TemplateBinding Tag}" 
                                       Padding="{TemplateBinding Padding}"
                                       VerticalAlignment="Center"
                                       HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
                                       Foreground="{StaticResource ForegroundMainBrush}"
                                       Opacity="0.5"/>
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="local:PasswordBoxWaterMark.PasswordLength" Value="0">
                            <Setter TargetName="WaterMark" Property="Visibility" Value="Visible"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</ResourceDictionary>

 PasswordBox添加水印辅助类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

namespace Fasetto.Word
{
    /// <summary>
    /// PasswordBox添加水印辅助类
    /// </summary>
    public class PasswordBoxWaterMark : DependencyObject
    {
        public static bool GetIsMonitoring(DependencyObject obj)
        {
            return (bool)obj.GetValue(IsMonitoringProperty);
        }

        public static void SetIsMonitoring(DependencyObject obj, bool value)
        {
            obj.SetValue(IsMonitoringProperty, value);
        }

        public static readonly DependencyProperty IsMonitoringProperty =
            DependencyProperty.RegisterAttached("IsMonitoring", typeof(bool), typeof(PasswordBoxWaterMark), new UIPropertyMetadata(false, OnIsMonitoringChanged));



        public static int GetPasswordLength(DependencyObject obj)
        {
            return (int)obj.GetValue(PasswordLengthProperty);
        }

        public static void SetPasswordLength(DependencyObject obj, int value)
        {
            obj.SetValue(PasswordLengthProperty, value);
        }

        public static readonly DependencyProperty PasswordLengthProperty =
            DependencyProperty.RegisterAttached("PasswordLength", typeof(int), typeof(PasswordBoxWaterMark), new UIPropertyMetadata(0));

        private static void OnIsMonitoringChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var pb = d as PasswordBox;
            if (pb == null)
            {
                return;
            }
            if ((bool)e.NewValue)
            {
                pb.PasswordChanged += PasswordChanged;
            }
            else
            {
                pb.PasswordChanged -= PasswordChanged;
            }
        }

        private static void PasswordChanged(object sender, RoutedEventArgs e)
        {
            var pb = sender as PasswordBox;
            if (pb == null)
            {
                return;
            }
            SetPasswordLength(pb, pb.Password.Length);
        }
    }
}

### 回答1: WPF是一种基于.NET框架的应用程序开发框架,而SQL Server是一种关系型数据库管理系统。在WPF应用程序中实现登录SQL Server的过程可以通过以下步骤完成: 1. 引用必要的命名空间:首先,在WPF项目中引用System.Data.SqlClient命名空间,该命名空间提供与SQL Server数据库连接和操作相关的类和方法。 2. 创建连接字符串:连接字符串是用于连接到SQL Server数据库的重要组成部分。可以使用如下代码创建一个连接字符串: string connectionString = "Data Source=服务器名;Initial Catalog=数据库名;User ID=用户名;Password=密码"; 其中,Data Source参数指定SQL Server的服务器名,Initial Catalog参数指定数据库名,User ID和Password参数用于指定登录SQL Server的用户名和密码。 3. 创建连接对象:使用SqlConnection类创建一个连接对象。可以使用如下代码创建一个连接对象: SqlConnection connection = new SqlConnection(connectionString); 4. 打开连接:使用连接对象的Open方法打开与数据库的连接。 connection.Open(); 5. 执行SQL语句:使用SqlCommand类创建一个命令对象,并执行相应的SQL语句。可以使用如下代码执行一个查询语句: string sql = "SELECT * FROM 用户表 WHERE 用户名=@username AND 密码=@password"; SqlCommand command = new SqlCommand(sql, connection); command.Parameters.AddWithValue("@username", 用户名参数); command.Parameters.AddWithValue("@password", 密码参数); SqlDataReader reader = command.ExecuteReader(); 6. 处理查询结果:对于查询语句,可以使用SqlDataReader类读取查询结果。如果查询到了符合条件的记录,可以进行相应的处理操作。 7. 关闭连接:使用连接对象的Close方法关闭数据库连接及相关资源。 connection.Close(); 通过以上步骤,就可以在WPF应用程序中实现登录SQL Server数据库。当然,在实际开发中,还需要进行异常处理、密码加密等安全措施,以提高系统的稳定性和安全性。 ### 回答2: 在WPF中实现登录SQL Server的过程可以分为以下几个步骤。 1. 创建WPF窗口,设计登录界面,包括用户名和密码的输入框以及登录按钮。 2. 创建SQL Server数据连接字符串,包括服务器名称、数据库名称、用户名和密码等信息。 3. 在代码中引入System.Data.SqlClient命名空间,以便于使用SQL Server的相关类和方法。 4. 在登录按钮的点击事件中,编写代码逻辑,首先获取用户输入的用户名和密码。然后使用SqlConnection类实例化一个数据库连接对象,并传入连接字符串。 5. 使用SqlCommand类实例化一个查询命令对象,将查询语句和连接对象作为参数传入。查询语句可以是SELECT语句,用于验证用户输入的用户名和密码是否正确。 6. 使用ExecuteScalar方法执行查询命令,返回结果集中的第一行第一列的值。如果查询结果不为空,则说明用户名和密码正确,登录成功。 7. 根据登录结果,可以进一步进行操作,如跳转到其他窗口或显示错误提示信息等。 需要注意的是,在使用SQL Server连接时,要确保SQL Server实例已经安装并启动,并且数据库文件已正确附加到此实例上。 此外,还需要考虑安全性问题,如密码加密存储、防止SQL注入等,以保证用户的数据安全。 ### 回答3: WPF(Windows Presentation Foundation)是.NET框架的一部分,用于创建现代化的图形用户界面。要在WPF应用程序中实现登录SQL Server的功能,可以按照以下步骤进行操作: 1. 引用必需的命名空间:在WPF应用程序的代码文件中,首先需要引用System.Data.SqlClient命名空间,以便能够使用SQL Server相关的类和方法。 2. 创建数据库连接字符串:在应用程序的配置文件(App.config或Web.config)中,定义SQL Server数据库的连接字符串。连接字符串包括SQL Server的服务器名称、数据库名称、身份验证方式(例如Windows身份验证或SQL身份验证)以及相关的用户名和密码。 3. 创建SqlConnection对象:在应用程序的代码文件中,可以使用SqlConnection类创建一个与SQL Server数据库的连接。使用连接字符串作为参数创建SqlConnection对象。 4. 打开数据库连接:使用SqlConnection对象的Open()方法打开与数据库的连接。 5. 执行SQL命令:可以使用SqlCommand类创建一个执行SQL语句的命令对象。可以使用SqlCommand对象的ExecuteNonQuery()方法执行修改数据库的命令,如INSERT、UPDATE或DELETE语句;或使用ExecuteReader()方法执行查询数据库的命令,如SELECT语句。 6. 处理查询结果:如果执行了SELECT语句,并且希望获取查询结果,可以使用SqlDataReader类来读取查询结果。用SqlDataReader对象的Read()方法按行读取查询结果,并可以使用相关方法获取每个字段的值。 7. 关闭数据库连接:使用SqlConnection对象的Close()方法关闭与数据库的连接,释放资源。 通过以上步骤,可以在WPF应用程序中实现登录SQL Server的功能。需要注意的是,为了保护用户输入的敏感信息,如密码,应该使用加密的方式存储密码并验证用户输入的凭据。同时还应该注意使用参数化查询,避免SQL注入攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值