当前位置: 代码网 > 科技>操作系统>Windows > WPF软件开发

WPF软件开发

2024年08月02日 Windows 我要评论
WPF是Windows Presentation Foundation的缩写,是一种基于XAML(Extensible Application Markup Language)的UI框架。它是由微软公司开发的,旨在提供一种更灵活、更强大的方式来开发Windows应用程序的用户界面。相比于传统的WinForms,WPF具有以下优点:XAML语言更加简洁易懂,易于维护和修改。支持矢量图形和动画效果,可以创建更加逼真的视觉效果。支持数据绑定和依赖属性,可以实现更加灵活的数据交互。

1、wpf介绍

官网:https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/app-development/?view=netframeworkdesktop-4.8

1.1、wpf定义

wpf是windows presentation foundation的缩写,是一种基于xaml(extensible application markup language)的ui框架。它是由微软公司开发的,旨在提供一种更灵活、更强大的方式来开发windows应用程序的用户界面。相比于传统的winforms,wpf具有以下优点:

xaml语言更加简洁易懂,易于维护和修改。
支持矢量图形和动画效果,可以创建更加逼真的视觉效果。
支持数据绑定和依赖属性,可以实现更加灵活的数据交互。
支持多线程编程,可以提高应用程序的性能和响应速度。
提供了丰富的控件和布局选项,可以轻松实现复杂的界面设计。

1.2、wpf和winform的区别

wpf和winform是两种不同的windows应用程序开发框架,它们在界面设计、性能、可扩展性等方面存在一些区别。

首先,wpf是一种基于xaml的ui框架,它使用xml格式来定义用户界面元素和布局。相比之下,winform使用c#代码来创建用户界面,需要手动编写html标记和css样式。这使得wpf更加灵活和易于维护,因为它允许开发人员使用一种更加直观和易于理解的方式来描述用户界面。

其次,wpf支持矢量图形和动画效果,可以创建更加逼真的视觉效果。而winform只能使用位图和gif等静态图像来显示内容,无法实现复杂的动画效果。此外,wpf还提供了更多的控件和布局选项,可以轻松实现复杂的界面设计。

另外,wpf支持数据绑定和依赖属性,可以实现更加灵活的数据交互。例如,开发人员可以使用数据绑定功能将一个控件的值与另一个控件的属性进行关联,从而实现数据的自动更新。而在winform中,需要手动编写代码来实现这种数据交互。

最后,wpf支持多线程编程,可以提高应用程序的性能和响应速度。它允许开发人员在不同的线程中执行耗时的操作,如文件读取或网络请求等,以避免阻塞主线程导致应用程序无响应。而在winform中,所有的操作都必须在主线程中执行。

2、使用jetbrains rider软件创建wpf项目

我习惯用jetbrains公司的产品,之前写java用idea习惯了,索性下载一个rider来开发c#。
rider是一款强大的代码编辑器,可以帮助开发人员快速创建wpf项目并编写代码。下面是如何使用rider创建wpf项目的步骤:

2.1、创建wpf项目

1.打开jetbrains rider软件,选择“create new project”创建一个新项目。
在“project templates”中选择“wpf app (.net framework)”,然后点击“next”。
2.输入项目名称和位置,然后点击“finish”完成项目创建。
在解决方案资源管理器中双击“mainwindow.xaml”文件打开主窗口的设计界面。

2.2、编写xaml代码,创建按钮

打开mainwindow.xaml文件,编写代码如下,不知道标签名字可以去官网查看。

<window x:class="wpftest.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:wpftest"
        mc:ignorable="d"
        title="file conversion" height="500" width="800" resizemode="canminimize" windowstartuplocation="centerscreen">
        
        <stackpanel background="#f2f4fb">
                <wrappanel background="beige" margin="0,10,0,10">
                        
                        <button x:name="fileconverbtn" click="fileconverbtn_onclick" background="#add8e6" content="文档转换" style="{staticresource mybuttonstyle1}"></button>
                        <button x:name="filetransbtn" click="filetransbtn_onclick" background="azure" content="文档翻译" style="{staticresource mybuttonstyle1}"></button>
                        <button x:name="loginbtn" click="loginpopup_onclick" background="azure" content="登录认证" style="{staticresource mybuttonstyle1}"></button>
                </wrappanel>
              
               
        </stackpanel>
</window>

效果如图

2.3、美化按钮

这些样式都可以在官网搜到。

<resourcedictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <style x:key="mybuttonstyle1" targettype="button">
        <setter property="fontfamily" value="宋体" />
        <setter property="fontweight" value="bold" />
        <setter property="width" value="100"></setter>
        <setter property="height" value="30"></setter>
        <setter property="margin" value="5,5,10,5"></setter>
        <setter property="fontsize" value="16"></setter>
        <setter property="cursor" value="arrow"/>
        <style.triggers>
            <trigger property="ismouseover" value="true">
                <setter property="cursor" value="hand"/>
            </trigger>
        </style.triggers>
    </style>

</resourcedictionary>

效果如下:
在这里插入图片描述

3、按钮控制显示\隐藏内容

3.1、创建两个面板

我们要达到的效果是:点击fileconverbtn按钮显示pdfconverpanel面板,点击filetransbtn按钮显示pdfconverpanel面板

<window x:class="wpftest.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:wpftest"
        mc:ignorable="d"
        title="file conversion" height="500" width="800" resizemode="canminimize" windowstartuplocation="centerscreen">
        
        <window.resources>
                <resourcedictionary>
                        <resourcedictionary.mergeddictionaries>
                                <resourcedictionary source="btnstyle.xaml"/>
                                <resourcedictionary source="filespace.xaml"/>
                                <resourcedictionary source="comboboxmouse1.xaml"/>
                                <resourcedictionary source="btnmouse1.xaml"/>
                                <resourcedictionary source="stackpanel1.xaml"/>
                        </resourcedictionary.mergeddictionaries>
                </resourcedictionary>
        </window.resources>
        
        <stackpanel background="#f2f4fb">
                <wrappanel background="beige" margin="0,10,0,10">
                        
                        <button x:name="fileconverbtn" click="fileconverbtn_onclick" background="#add8e6" content="文档转换" style="{staticresource mybuttonstyle1}"></button>
                        <button x:name="filetransbtn" click="filetransbtn_onclick" background="azure" content="文档翻译" style="{staticresource mybuttonstyle1}"></button>
                        <button x:name="loginbtn" click="loginpopup_onclick" background="azure" content="登录认证" style="{staticresource mybuttonstyle1}"></button>
                </wrappanel>
                
                <wrappanel background="aquamarine" x:name="pdfconverpanel" margin="10">
                        <combobox x:name="pdfconvertcombobox"  style="{staticresource comboxmouse1}">
                                <comboboxitem content="pdf转docx" isselected="true"/>
                                <comboboxitem content="pdf转doc" />
                                <comboboxitem content="pdf转html" />
                        </combobox>
                </wrappanel>
                <stackpanel x:name="transpanel" visibility="collapsed">
                       
                </stackpanel>
               
        </stackpanel>
</window>

3.2、给按钮添加事件

/// <summary>
        /// 文档转换按钮 ,点击之后,面板切换到文档转换面板
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void fileconverbtn_onclick(object sender, routedeventargs e)
        {
            // 显示pdfconverpanel
            pdfconverpanel.visibility = visibility.visible;
            // 隐藏transpanel
            transpanel.visibility = visibility.collapsed;
            //设置点击时按钮的颜色
            fileconverbtn.background = new solidcolorbrush(color.fromrgb(173, 216, 230));
            filetransbtn.background = new solidcolorbrush(color.fromrgb(0xe9, 0xf4, 0xff));
        }
        
        /// <summary>#add8e6
        /// 文档翻译按钮 ,点击之后,面板切换到文档翻译面板
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void filetransbtn_onclick(object sender, routedeventargs e)
        {
            // 隐藏pdfconverpanel
            pdfconverpanel.visibility = visibility.collapsed;
            // 显示transpanel
            transpanel.visibility = visibility.visible;
            //设置点击时按钮的颜色
            fileconverbtn.background = new solidcolorbrush(color.fromrgb(0xe9, 0xf4, 0xff));
            filetransbtn.background = new solidcolorbrush(color.fromrgb(173, 216, 230));
            
        }

4、总结

感谢您的阅读,希望本篇博客对您有所帮助。wpf是一种基于xaml的ui框架,它提供了更加灵活、更强大的方式来开发windows应用程序的用户界面。相比于传统的winforms,wpf具有更高的灵活性、更好的用户体验、更丰富的控件和布局选项以及更好的性能表现。

在创建wpf项目时,可以使用jetbrains rider软件来简化流程。通过可视化设计器,可以轻松地创建wpf项目并添加窗口、按钮等控件。同时,也可以使用代码编辑器编写xaml代码来实现更加复杂的界面设计。

在使用wpf的过程中,需要注意一些细节问题,如如何将窗口居中显示、如何禁止最大化等。这些小技巧可以帮助我们更好地利用wpf的特性,实现更加美观、高效的用户界面。

最后,本篇博客介绍了如何添加按钮以及如何美化按钮。按钮是wpf应用程序中最常用的控件之一,它可以用于触发各种操作和事件。通过对按钮进行美化和添加事件处理程序,可以实现更加友好、易于使用的用户体验。
如有帮助,还请动动手指点个赞!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com