编程语言
首页 > 编程语言> > WPF应用程序(.NET Core)

WPF应用程序(.NET Core)

作者:互联网

WPF应用程序框架(.NET Core)

--此博客编写WPF为.net Core型,编写.net  Framework型参考博客--https://www.cnblogs.com/ZhuMeng-Chao/p/16362541.html

--WPF教程视频可以参考 https://www.bilibili.com/video/BV1nY411a7T8?p=1&spm_id_from=pageDriver

1、创建程序

 

 2、创建成功初始信息

 

 

 3、配置

3-1:App.xaml引入materialDesign ui资源 (类似于引用element ui)

3-1-1    安装包MaterialDesignThemes

 

 

3-1-2    App.xaml中代码引入materialDesign ui资源

xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
<ResourceDictionary>
            <!--  引入materialDesign ui资源  -->
            <ResourceDictionary.MergedDictionaries>
                <materialDesign:BundledTheme
                    BaseTheme="Light"
                    PrimaryColor="DeepPurple"
                    SecondaryColor="Lime" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

 

 3-1-3  应用materialDesign ui资源效果(类似用element ui控件)

 

 3-1-3   加入工具--实现代码格式化

 https://zhuanlan.zhihu.com/p/345257435

 

 

 

4、框架

4-1 默认没有注入之类的  --所以引入第三方架构prism

 

4-1-1  安装prism  (prism.Dryioc包)

 

4-1-2  代码引入prism

xmlns:prism="http://prismlibrary.com/"

4-2  配置上prism框架

4-2-1  App.xaml.cs文件中修改其基类

 

PrismApplication

4-2-2  修改基类后又对应错误(未配置)信息

 

4-2-3   解决 1:        其.cs文件对应的.xaml文件也应该修改

<prism:PrismApplication></prism:PrismApplication>

--未解决完错误信息:

 

4-2-4   解决 2:        其加入对应代码

 1  protected override Window CreateShell()
 2         {
 3             //默认启动页面
 4             return Container.Resolve<MainWindow>();
 5         }
 6 
 7         /// <summary>
 8         /// prism的视图和model的映射
 9         /// </summary>
10         protected override void RegisterTypes(IContainerRegistry containerRegistry)
11         {
12             ////注册 view 与 viewmodel 的映射关系
13             //containerRegistry.RegisterForNavigation<LoginView, LoginViewModel>();
14 
15             ////注册 home 与 homeViewModel 的映射关系
16             //containerRegistry.RegisterForNavigation<Home, HomeViewModel>();
17         }
View Code

 

4-3  创建对应登录文件完成登录

4-3-1  创建 .xaml 文件

 

 4-3-2 创建其对应.cs 文件

 

 

 4-3-3   在Appp.xaml.cs中将两者(.xaml与其对应的.cs文件)建立起联系-关联

containerRegistry.RegisterForNavigation<LoginView, LoginViewModel>();

 

 

 4-3-4 登录页面显示布局

  4-3-4.1   实现登录时页面布局上有个图片(切记第三步那里改为资源,授课时说的容易不显示)

  4-3-4.2   页面布局1--图片显示

 

 

  4-3-4.2   页面布局2---实现有默认提示文字

      例如:布局文本框里面的提示文字--注意--需要申明一下这样布局

    

    完成基本布局  

    

   4-3-5  实现以弹出层方式运行该登录页面

  4-3-5.1  新建一个.xmal页和对应.cs文件并将其设置为起始页,然后运行开始通过dialog方式弹出登录弹出层

  --右键项目--添加--用户控件=》实现添加一个xmal页;并新建一个对应.cs文件;设置启示页+添加映射;

 

  4-3-5.2   App.xaml中编写初始化方法--实现项目启动的时候, 首先弹出登录框,进行登录

 

 1 /// <summary>
 2         /// 初始化方法
 3         /// </summary>
 4         protected override void OnInitialized()
 5         {
 6             //项目启动的时候, 首先弹出登录框,进行登录
 7             var dialog = Container.Resolve<IDialogService>();
 8             dialog.ShowDialog("LoginView", callback =>
 9             {
10                 //如果选择的不是登录,则直接关闭程序
11                 if (callback.Result != ButtonResult.OK)
12                 {
13                     //关闭程序
14                     Environment.Exit(0);
15                     return;
16                 }
17                 //var service = App.Current.MainWindow.DataContext as IConfigureService;
18                 //if (service != null)
19                 //    service.Configure();
20                 base.OnInitialized();
21             });
22 
23         }
View Code

 

  异常报错:

   

  解决:

1、登录页引入dialog配置

1 <prism:Dialog.WindowStyle>
2         <Style TargetType="Window">
3             <Setter Property="Width" Value="600" />
4             <Setter Property="Height" Value="350" />
5             <Setter Property="SizeToContent" Value="WidthAndHeight" />
6             <Setter Property="ResizeMode" Value="NoResize" />
7             <Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen" />
8         </Style>
9     </prism:Dialog.WindowStyle>
View Code
 xmlns:prism="http://prismlibrary.com/"

 

2、对应cs文件添加继承

 

--再次运行出现错误信息

  

 

解决---对应的继承实现方法最开始先按照如图红框里的编辑(目前先可正常运行)

实现窗口显示:

 

 

4、登录页布局完善

  1、点击登录系统按钮,有一个加载转圈的实现

  2、密码或者账号输入错误有对应信息弹出提示

实现一:

 

1  xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
2 
3 <md:DialogHost
4         x:Name="DialogHost"
5         DialogTheme="Inherit"
6         Identifier="Root">
7 </md:DialogHost>
View Code

 

 

LoginView.xaml.cs文件使用prism 事件聚合器对应事件实现加载转圈效果

 1 /// <summary>
 2     /// LoginView.xaml 的交互逻辑
 3     /// </summary>
 4     public partial class LoginView : UserControl
 5     {
 6         public LoginView(IEventAggregator aggregator, LoginViewModel view)
 7         {
 8             InitializeComponent();
 9             //使用事件聚合器 加载动画
10             aggregator.WaitForResgiter(arg =>
11             {
12                 Dispatcher.Invoke(new Action(() =>
13                 {
14                     DialogHost.IsOpen = arg.IsOpen;
15                     if (DialogHost.IsOpen)
16                         DialogHost.DialogContent = new ProgressView();
17                 }));
18             });
19             // DialogHost
20         }
21     }
WaitForResgiter 

创建一个放置加载转圈的那个控件xmal页面  --右键--新增--用户控件

1 <StackPanel Width="100">
2             <ProgressBar
3                 Width="40"
4                 Height="40"
5                 Margin="20"
6                 IsIndeterminate="True"
7                 Style="{StaticResource MaterialDesignCircularProgressBar}" />
8         </StackPanel>
StackPanel

 

 

对应model.cs文件(LoginViewModel.cs)中对应按钮触发事件里编写使用事件聚合器里的事件

 

 

 完成效果

 

 

 实现二:

1  <!--  -消息提示  -->
2             <md:Snackbar
3                 x:Name="LoginSnackBar"
4                 Grid.ColumnSpan="2"
5                 Panel.ZIndex="1"
6                 MessageQueue="{md:MessageQueue}" />
Snackbar

 

 

 LoginView.xaml.cs文件使用prism 事件聚合器对应事件实现弹出信息框显示

1  //使用事件聚合器 消息提示
2             aggregator.ResgiterMessage(arg =>
3             {
4                 Dispatcher.Invoke(new Action(() =>
5                 {
6                     LoginSnackBar.MessageQueue.Enqueue(arg.Message);
7                 }));
8             });
View Code

 

 

对应所需要弹框出编辑内容

实现效果

 

 

5、调用api接口实现登录

 

 

 

 

 

 

 

 

 

 

 

  

 

标签:Core,登录,--,xaml,对应,prism,cs,WPF,NET
来源: https://www.cnblogs.com/ZhuMeng-Chao/p/16393226.html