【WPF】基于WPF的上位机开发模板


>>返回总目录<<

一. 背景

在嵌入式开发中,经常会写一些脚本来提高工作效率,在工作中发现,周围同事写的很多脚本都不是可视化的,执行的时候只有一个简单的黑框,对于一个新的使用者来说不是很友好,也不利于脚本工具的传播。如果能为脚本工具添加一个可视化的界面,在界面上添加一些按钮/列表/弹框等信息,将会降低脚本工具的学习和使用成本,提高工具的友好性。
基于C#语言的WPF(Windows Presentation Foundation)便是一个很好的界面开发工具,它可以进行可视化编程,需要通过Visual Studio进行开发,是广泛使用的上位机开发工具。对于一个初学者来说,我们不需要了解特别高深的知识,只要知道一些简单基本的操作就可以,比如怎么设置界面窗口的长宽,怎么在界面添加一个按钮,在哪里添加按钮的执行逻辑等等。

二. 基于WPF的通用界面模板

博主在这里整理了一个简单的WPF模板,主要实现功能,通过二级窗口添加输入信息在列表中,然后点击生成按钮对输入信息进行处理,比如在用户手册中筛选信息,最后把筛选出来的信息显示在界面上。该模板具有一定的通用性,可以在其基础上做一些简单的修改,以适应自己特定的业务场景。界面如下图:
在这里插入图片描述
界面主要分为5个部分:
(1) 上部左侧是型号选择区;
(2) 上部右侧是输入信息操作区,点击Add按钮弹出二级窗口,在二级窗口中选择输入信息添加到输入信息显示区;
(3) 中间左侧是输入信息显示区;
(4) 中间右侧是生成的结果信息显示的地方;
(5) 下部Generate按钮是根据输入信息生成相应的输出信息,并将输出信息显示在结果显示区,Clear按钮可以将所有生成的信息从界面清除。

三. WPF与python的协同开发

我们在写工具脚本时,通常会使用python语言,因为python具有非常丰富的库文件,能够非常方便的处理excel/word/pdf/txt等等各种文件,而WPF没有这样的优势,因此我们可以把python语言和WPF结合起来进行开发。比如可以用python程序打包成一个exe,然后在Generate按钮的处理函数中直接调用该exe执行,同时把WPF界面上输入的参数传入,exe执行后把输出的信息保存在一个txt文件中,最后通过WPF把生成信息显示在界面上。
关于如何在C#中调用exe创建新进程及如何传参可以参考:【C#】调用exe创建进程及传参方法

四. WPF模板代码路径

WPF程序包路径如下,可以基于此根据特定的实现功能进行修改。
WPF模板工程代码路径(不需要积分):https://download.csdn.net/download/m0_38045338/87384293

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的基于 WPF MVVM 框架的上位机示例代码,实现了一个简单的计数器功能: MainWindow.xaml: ``` <Window x:Class="WPFMVVMExample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WPF MVVM Example" Height="200" Width="300"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBlock Text="{Binding Count}" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Center"/> <Button Content="Increase" Command="{Binding IncreaseCountCommand}" Grid.Row="1" HorizontalAlignment="Center"/> </Grid> </Window> ``` MainWindow.xaml.cs: ``` using System.Windows; namespace WPFMVVMExample { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new MainViewModel(); } } } ``` MainViewModel.cs: ``` using System.ComponentModel; using System.Windows.Input; namespace WPFMVVMExample { public class MainViewModel : INotifyPropertyChanged { private int _count; public int Count { get { return _count; } set { _count = value; OnPropertyChanged("Count"); } } public ICommand IncreaseCountCommand { get; private set; } public MainViewModel() { Count = 0; IncreaseCountCommand = new RelayCommand(IncreaseCount); } private void IncreaseCount() { Count++; } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } } } ``` RelayCommand.cs: ``` using System; using System.Windows.Input; namespace WPFMVVMExample { public class RelayCommand : ICommand { private readonly Action _execute; private readonly Func<bool> _canExecute; public RelayCommand(Action execute) : this(execute, null) { } public RelayCommand(Action execute, Func<bool> canExecute) { if (execute == null) throw new ArgumentNullException("execute"); _execute = execute; _canExecute = canExecute; } public bool CanExecute(object parameter) { return _canExecute == null ? true : _canExecute(); } public void Execute(object parameter) { _execute(); } public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } } } ``` 这个示例代码实现了一个简单的计数器功能,通过按钮点击可以增加计数器的值。在 ViewModel 中定义了一个 Count 属性和 IncreaseCountCommand 命令,Count 属性绑定到 TextBlock 控件的 Text 属性上,IncreaseCountCommand 命令绑定到 Button 控件的 Command 属性上。使用了 RelayCommand 类实现了 ICommand 接口,处理按钮点击事件。在 MainWindow.xaml.cs 中设置了 DataContext 为 MainViewModel 的实例,实现了界面和 ViewModel 的绑定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

woniudaidai

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值