WPF 项目梳理

第一步:先建立数据库,这里使用EF建立联系
首先在sql server

这个是LoginWindow.xaml登录页面,这个是自己写的

<mah:MetroWindow  xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" x:Class="CMS.Windows.LoginWindow"
        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:CMS.Windows"
        mc:Ignorable="d"
        WindowStartupLocation="CenterScreen"
        
        <--! 这里 -->
        DataContext="{Binding Source={StaticResource Locator},Path=Login}"  
        Title="LoginWindow" Height="350" Width="600">

这里的Locator是指文件ViewModelLocator.cs,这个类里存放了许多viewmodel,通过中间的这个类,使用path可以调用到对应页面的viewmodel

<Grid>
        <Grid Margin="100 50 50 50">
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <TextBlock Grid.Row="0" Text="{Binding AppData.SystemName}" HorizontalAlignment="Center" FontSize="36"/>
            <StackPanel Grid.Row="1" VerticalAlignment="Center" Orientation="Horizontal">
                <TextBlock Text="用户名" Width="60" FontSize="18" Margin="50 0 0 0"/>
                <TextBox Text="{Binding AppData.CurrentUser.Name}" Width="200" Margin="10 0 0 0"/>
            </StackPanel>
            <StackPanel Grid.Row="2" VerticalAlignment="Center" Orientation="Horizontal">
                <TextBlock Text="密码" Width="60" FontSize="18" Margin="50 0 0 0"/>
                <TextBox Text="{Binding AppData.CurrentUser.Password}" Width="200" Margin="10 0 0 0"/>
            </StackPanel>
            <StackPanel Grid.Row="3" VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Center">
                <Button Content="登录" Width="80" Command="{Binding LoginCommand2}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/>
                <Button Content="取消" Width="80" Command="{Binding CloseCommand}" Margin="50 0 0 0"/>
            </StackPanel>
        </Grid>
    </Grid>

下面的绑定(binding)可以直接绑定对应viewmodel(LoginViewModel)里的属性
下面这个是绑定命令的具体代码

 // 这个可以关闭对应窗口
        public RelayCommand<Window> LoginCommand2
        {
            get
            {
                return new RelayCommand<Window>((arg) =>
                {
                    // 实例化一个对象
                    MemberProvider memberProvider = new MemberProvider();
                    // 验证登录
                    var list = memberProvider.Select();
                    var user = list.FirstOrDefault(item => item.Name == AppData.CurrentUser.Name
                    && item.Password == AppData.CurrentUser.Password);

                    // 成功和不成功的操作
                    if (user == null)
                    {
                        MessageBox.Show("用户名或密码错误");
                    }
                    else
                    {
                        //调用主窗体
                        MainWindow mainWindow = new MainWindow();
                        mainWindow.Show();
                        //关闭当前窗口
                        arg.Close();
                    }
                });
            }
        }

ToggleButtonDictonary资源字典

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style x:Key="ToggleButtonStyle" TargetType="{x:Type ToggleButton}">
        <Setter Property="FontFamily" Value="../Fonts/#FontAwesome"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToggleButton}">
                    <TextBlock x:Name="textBlock" Text="&#xf060;" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}"/>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="TextBlock.Text" Value="&#xf061;" TargetName="textBlock"/>
                        </Trigger>
                        <Trigger Property="IsChecked" Value="False">
                            <Setter Property="TextBlock.Text" Value="&#xf060;" TargetName="textBlock"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        
        
    </Style>
</ResourceDictionary>

这个资源字典的具体使用

<Grid Grid.Column="1">
            <ToggleButton x:Name="toggleButton" Width="30" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Content="&#xf060;" FontSize="20" Margin="10 25" Foreground="White" Style="{DynamicResource ToggleButtonStyle}" />
            
        </Grid>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值