WPF
重-庆-教-主
这个作者很懒,什么都没留下…
展开
-
C#+WPF上位机开发(模块化+反应式)作者:重庆教主
程序员往往会将一个大型的软件项目拆分成小项目(模块),比如上位机系统中会接入各种硬件(工业相机、PLC、数据采集器、扫码枪、控制卡等),良好的软件架构思路是将同一种类型的硬件抽象成一个硬件抽象类,然后,不同型号的硬件与继承这个抽象基类,实现各自硬件的业务逻辑(加载硬件、打开硬件、使用硬件、关闭硬件),要实现这些开发,Prism的模块就派上用场了。第三,是数据库模块。第二、是硬件模块,上位机开发离不开硬件的接入,而不同的上位机系统,其接入的硬件也是五花入门,比如MES系统,可能最常见的硬件是PLC、扫码枪;原创 2023-08-01 11:48:49 · 4536 阅读 · 0 评论 -
WPF中实现以鼠标为中心的缩放和移动图片或控件对象
TransformGroup类是一个组合,下面有一个Children集合,将ScaleTransform和TranslateTransform 丢到集合中,然后将TransformGroup丢给需要缩放平移的控件对象。有一个关键点要理解,如果要移动border对象,那么这个border对象是相对于谁而移动?答案是相对于它的父容器。在WPF中要实现控件的缩放和移动,有现成的工具类可以使用,主要是TransformGroup类,ScaleTransform类和TranslateTransform 类。原创 2023-02-03 17:22:09 · 2893 阅读 · 2 评论 -
WPF中TextBox如何实现输入两位小数点
默认情况下,就算绑定的属性类型是double型,在textbox控件中,也不能输入小数点,那么如何实现小数的输入呢?答案是利用StringFormat。第一步,在ViewModel中创建一个double属性,并实现属性通知。原创 2022-12-30 10:57:26 · 1889 阅读 · 0 评论 -
利用WPF的Popup做一种模态弹出对话消息框
在WPF中,Popup是一个可弹出并显示内容的控件,当它显示的时候,始终会显示在UI的最上方,利用这一特性,我们可以扩展它的功能。原创 2022-11-11 10:32:50 · 1787 阅读 · 0 评论 -
WP中MultiBinding的用法
主要用了一个多值转换器TestBorderMultibindingConverter去控制border。在一个使用场景中,我需要根据两个条件去控制border控件最下面的边是否显示,于是就有了下面的用法。原创 2022-11-09 16:34:17 · 563 阅读 · 0 评论 -
WPF开发一款截屏小工具
总体思路:两个窗体,主窗体只有一个按钮,按下之后,打开截屏窗体,在打开的时候,先截全屏,然后显示,再利用鼠标框选要截屏的区域,最后交给内存,方便复制到其它软件中使用。这里实现了按钮拖动时移动窗体,按下则截图。接下来看看截屏窗体的代码。最后一张图是从整图中截取需要的区域。第一步,主窗体XAML。首先是窗体XAML代码。至此,构造函数结束。原创 2022-09-22 11:42:42 · 696 阅读 · 0 评论 -
WPF中ListView的漂亮样式与自定义模板
写一个 ListView控件后,绑定上数据和设置好style即可。然后设置ItemTemplate模板,这里设置每一行具体的样式、布局等。接下来,我们看看前端XAML调用。上面是Template模板设置。原创 2022-09-22 09:29:28 · 3122 阅读 · 0 评论 -
WPF的DataGrid控件样式自定义
DataGrid控件很常用,不同的软件中,设计师呈现的UI样式不一样,参考了网上一些设置,先弄个简单的吧。第一步,创建实体model,第二步,写一个ViewModel,生成一些显示的数据第三步,在app.xaml中写一些关于DataGrid样式的代码最后在UI中使用DataGrid控件即可。最终效果如下:...原创 2022-05-13 11:51:11 · 764 阅读 · 0 评论 -
WPF中利用DynamicResource动态资源和资源字典实现软件中英文切换
在一个项目中,有时候会遇到不同国家或地区的软件用户,这样就需要对软件UI界面进行语言翻译,我们可以利用DynamicResource和资源字典来实现这一需求。我们可以将不同的语言字典封装到一个项目中,然后其它项目再引用即可。第一步,创建语言字典项目:WpfLanguage在这个项目中,新建一个Resource目录,在目录中再创建两个语言包文件,分别是en-US.xaml和zh-CN.xaml两个文件的内容大致如下zh-CN.xamlen-US.xaml可以看到其中的key键都是相同的,只是原创 2022-04-11 14:11:15 · 3093 阅读 · 0 评论 -
关于安装mvvmlight后出现命名空间名“Practices”或是Locator不存在的问题
删除 using Microsoft.Practices.ServiceLocation;原创 2022-03-25 08:16:54 · 428 阅读 · 0 评论 -
WPF中LiveCharts报表控件的应用示例
如上图所示,首先我们在ViewModel中定义好相应的数组属性,并初始化Seriespublic class LiveChartsViewModel :ViewModelBase { public LiveChartsViewModel() { SeriesCollection = new SeriesCollection { new ColumnSeries .原创 2022-01-26 16:46:48 · 851 阅读 · 1 评论 -
WPF中利用VisualBrush给TextBox文本框设置水印文字
<TextBox> <TextBox.Resources> <VisualBrush x:Key="WaterText" TileMode="None" Opacity="0.3" Stretch="None" AlignmentX="Left"> <VisualBrush.Visual> <TextBlock FontStyle="Italic" Text="水印效果"/&原创 2021-12-31 16:48:40 · 790 阅读 · 0 评论 -
WPF中利用数据多条件触发器控制Button控件的可用性
前言假设我们有两个文本框,需要输入姓名和年龄,且两项为必须输入的字段。这时候我们可以利用Validation类扩展自己的数据验证,同时将验证结果绑定到Button的IsEnabled属性上,当两个TextBox输入的值通过数据验证后,Button才可用。首先,我们创建两个数据验证类public class NameValidationRule : ValidationRule { public override ValidationResult Validate(object原创 2021-12-27 16:29:08 · 1741 阅读 · 0 评论 -
利用WPF中的触发器和关键帧动画去改变任意控件的属性
前言本示例中将有三个控件,分别是ToggleButton、TextBlock、Grid。我们将利用ToggleButton控件的Checked和Unchecked两个事件分别做成两个触发器,去调用两个不同的Storyboard故事板,在故事板中我们再利用DoubleAnimationUsingKeyFrames关键帧动画类去控制grid控件的宽度,利用ObjectAnimationUsingKeyFrames关键帧动画类去控件textblock控件的显示与隐藏。首先,我们写好两个Storyboard供触原创 2021-12-22 10:23:46 · 1422 阅读 · 0 评论 -
WPF中利用RadioButton按钮制作漂亮的导航条
这次我们将利用RadioButton自定义模板实现图文按钮的效果,其中图标采用阿里巴巴图标库,从网上下载阿里巴巴图标库的ttf文件,并导入到项目中备用。然后我们编写前端代码<UniformGrid Columns="4" Height="40" Width="400"> <RadioButton Style="{StaticResource defaultRadioStyle}"> <StackPanel Orientation="Horiz.原创 2021-12-17 15:30:29 · 2569 阅读 · 0 评论 -
WPF中利用Ellipse或Rectangle实现圆形进度条
效果如下上面两个进度条,分别利用了Ellipse或Rectangle的StrokeThickness属性和StrokeDashArray属性,StrokeDashArray是设置边框长度,但要根据StrokeThickness的厚度进行相关于周长的转换。转换函数如下/// <summary>/// 计算进度条百分比/// </summary>/// <param name="progress">百分比0-100</param>/// <p原创 2021-12-17 11:45:50 · 3168 阅读 · 0 评论 -
WPF中ListBox的自定义模板
<SolidColorBrush x:Key="ListBox.Static.Background" Color="#FFFFFFFF"/> <SolidColorBrush x:Key="ListBox.Static.Border" Color="#FFABADB3"/> <SolidColorBrush x:Key="ListBox.Disabled.Background" Color="#FFFFFFFF"/> &..原创 2021-12-16 14:49:25 · 1301 阅读 · 0 评论 -
DataStateBehavior数据状态行为设置控件可视状态示例
<Grid Background="Transparent"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualStateGroup.Transitions> <VisualTransition GeneratedDuration="0:0:1" To="Checke原创 2021-12-16 11:33:05 · 324 阅读 · 0 评论 -
关于WPF中Command绑定传参数以及将命令绑定到其它事件的方法
前言:在WPF中,将命令绑定到一个Button的Command属性中是非常简单的事情,例如:<Button Content="单击命令" Command="{Binding ClickCommand}"/>但是很多时候,我们要实现其它事件的命令绑定,以此实现彻底的MVVM开发模式,那就得用到微软另外一个神器了!它就是程序集System.Windows.Interactivity,在网上可以下载System.Windows.Interactivity.dll这个库文件。当然,在mvvmli原创 2021-12-15 11:09:41 · 16727 阅读 · 5 评论 -
WPF中数据触发器DataTrigger去改变某控件的显示或隐藏
<Grid> <CheckBox x:Name="_checkbox1"/> <TextBox Background="Red" Width="100" Height="100"> <TextBox.Style> <Style TargetType="TextBox"> <Style.Triggers>原创 2021-11-26 11:49:33 · 2922 阅读 · 0 评论 -
WPF的样式、模板、动画帖子集合
WPF:ListBox 利用ItemContainerStyle改变ListBoxItem样式ComboBox的样式原创 2021-11-03 17:40:30 · 184 阅读 · 0 评论 -
给CheckBox增加一个单击旋转功能的行为
创建一个RotateBehavior类,继承System.Windows.Interactivity空间中的Behavior泛型类,前端直接调试即可 public class RotateBehavior : Behavior<CheckBox> { private RotateTransform rotate = null; private Storyboard storyboard = new Storyboard(); privat原创 2021-11-01 17:19:22 · 143 阅读 · 0 评论 -
美化WPF中TextBox的Style样式
最后项目中美工给出了一套设计方案,需要修改Textbox控件的样式,于是修改一下默认的样式和模板<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:converter="clr-n原创 2021-10-29 11:00:05 · 3954 阅读 · 0 评论 -
美化WPF中ScrollViewer的垂直滚动条样式
新建一个字典文件Resource\ScrollViewerDictionary.xaml<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ControlTemplate x:Key="ScrollViewer原创 2021-10-22 17:38:07 · 1688 阅读 · 1 评论 -
WPF中控件的放大缩小动画
/// <summary> /// 缩放动画 /// </summary> /// <param name="element">控件名</param> /// <param name="RenderX">变换起点X坐标</param> /// <param name="RenderY">变换起点Y坐标</param>原创 2021-09-27 18:00:06 · 1679 阅读 · 0 评论 -
WPF中TextBox输入框利用Validation进行数据验证
//继承一个ValidationRule,重写Validate方法public class NumberValidationRule : ValidationRule { public override ValidationResult Validate(object value, CultureInfo cultureInfo) { double myValue = 0; if (double.TryParse(va原创 2021-06-29 10:16:27 · 4244 阅读 · 0 评论 -
将Listbox的SelectedItem绑定到一个UserControl中
说明:在很多时候,我们需要用一个ListBox显示集合数据,当用户选择集合中的某一项时,需要在另一个地方把这一项的详细数据显示出来,那我们可以利用UserControl来显示详情,重写UserControl.ContentTemplate即可。<Grid> <ListBox x:Name="List1"> <ListBox.ItemsPanel> <ItemsPanelTemplate>原创 2021-06-21 16:46:10 · 449 阅读 · 0 评论 -
WPF中利用Storyboard和DoubleAnimnation移动按钮动画
<Button Content="往右跑的按钮" Width="200" VerticalAlignment="Center" Cursor="Hand" Foreground="Black" Name="btnDevice"><Button.RenderTransform> <TranslateTransform/></Button.RenderTransform><Button.Triggers> <EventTri原创 2021-06-17 10:59:40 · 710 阅读 · 0 评论 -
WPF自定义按钮中利用Path路径生成图标
第一步,在App.xaml中定义一个Path路径资源<ResourceDictionary> <!--Setting Image--> <PathFigureCollection x:Key="SettingPathData"> M704.334 320.166c-166.812-169.952-465.88-48.558-464.332 192.338C239.94 662.402 362.098 784.56 512 784.5c240.882 1.5原创 2021-06-09 11:48:36 · 2372 阅读 · 4 评论 -
WPF中Path利用SVG路径作为Image控件的背景
第一步,定义Path和DrawingImage资源<!--Close Image--><PathFigureCollection x:Key="ClosePathData"> M482.048 0h64v533.333h-64V0z M695.381 132.864v54.187c128 69.845 225.494 208.618 225.494 368.469 0 230.08-184.939 416.64-415.019 416.64-230.123 0-4原创 2021-06-08 17:03:53 · 1882 阅读 · 0 评论 -
WPF动画、模板、样式、行为、多线程、数据绑定、MVVMLight用法、自定义控件示例(不断更新中)
本示例适合初学者参考,是作者练习WPF的笔记,放上来与大家一起进步!本资源是笔者学习过程中的笔记,目前包含了WPF中基本控件用法、数据绑定 、WPF动画效果、样式、模板定义、自定义控件、附加行为、多线程、串口模拟编写思路、导航页面、拖动效果、查看控件的默认模板,在集合中如果绑定命令等知识点,适中初级,中级开发者参考。下载地址上图是一个listview的样式,主要用到DataTemplateSelector类上图把常用控件的默认模板打印出来,方便更改样式上图是一个模拟串口读写的通讯架构,主原创 2021-06-07 14:58:11 · 359 阅读 · 0 评论 -
WPF中Grid控件设置LinearGradientBrush渐变背景色
<Grid.Background> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Offset="0" Color="#4D75AC"></GradientStop> <GradientStop Offset="1" Color="#675B8B"></GradientStop> </LinearGradien原创 2021-06-02 09:21:15 · 873 阅读 · 0 评论 -
WPF在ListView中绑定Command命令的写法
假定:ViewModel中有一个数据源叫Persons,有一个命令叫DoCommand,通过System.Windows.Interactivity触发器绑定鼠标MouseUp事件,当UI端绑定了DataContext数据上下文之后,Command="{Binding DoCommand}"是找不到这个命令的,必须使用Binging类的RelativeSource属性先找到当前UI,再找到DataContext里面的DoCommand才可以。如下所示<ListView ItemsSource =原创 2021-05-31 14:15:03 · 2776 阅读 · 1 评论 -
利用Interactivity的Behavior实现控件拖动
拖动控件的实现方式至少有两种,一种是将被拖动的控件放在一个Canvas之后,利用改变该控件的附加属性Canvas.LeftProperty和Canvas.Top两个属性,就可以实现被拖动的控件在Canvas中的位置。而这次我们不需要将控件放到一个Canvas控件里面,可以是任务需要实现拖动的控件,并且不关心他的父级控件的类型,利用UIElement类的RenderTransform属性,改变其TranslateTransform的X和Y值,就可以实现控件的鼠标拖动效果了。下面给出这个类的实现 publi原创 2021-05-27 09:40:54 · 190 阅读 · 0 评论 -
WPF中控件实现TranslateTransform平移
//_leftCanvas表示控件,效果向左平移DoubleAnimation leftAnimation = new DoubleAnimation();leftAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.25));leftAnimation.To = -600;leftAnimation.From = 0;_leftCanvas.RenderTransform = new TranslateTransform();_lef原创 2021-05-26 09:40:10 · 1629 阅读 · 0 评论 -
WPF中如何利用Style样式的EventTrigger和ColorAnimation为控件实现鼠标滑过或按下时改变背景颜色
<Border BorderThickness="0 1 0 1" BorderBrush="#D0CFD4"> <Border.Style> <Style TargetType="{x:Type Border}"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True">原创 2021-05-21 11:07:23 · 2681 阅读 · 0 评论 -
WPF中ItemsControl的模板设置
<ItemsControl x:Name="_userItemsControl" ItemsSource="{Binding UserInfos}" Width="1824" ScrollViewer.HorizontalScrollBarVisibility="Hidden"> <ItemsControl.ItemsPanel> <ItemsPanelTempla...原创 2021-05-21 10:06:07 · 2490 阅读 · 0 评论 -
WPF中利用指数函数缓动动画实现控件左右滑动切换效果
项目中需要将一个控件进行左右滑动切换,具体要求是:1、按住控件往右滑动,根据手势滑动的距离判断是滑出界面还是滑回原位,如果手势距离超过设定值,这个控件就从右边飞出去,然后从程序的左边飞进来;2、同上,反向实现其效果;3、判断向左或向右滑动的次数,例如最多向左滑5次,最多向右滑5次,实际上就在1-10之间左右来回切换。下面将把源代码贴上来,以供参考。第一步,我们先写一个自定义控件<UserControl x:Class="WpfApp1.Controls.EllipseControl"原创 2021-05-20 18:03:41 · 988 阅读 · 0 评论 -
WPF Binding类的 Mode和UpdateSourceTrigger枚举说明
WPF 绑定模式(mode) 枚举值有5个1:OneWay(源变就更新目标属性)2:TwoWay(源变就更新目标并且目标变就更新源)3:OneTime(只根据源来设置目标,以后都不会变)4:OneWayToSource(与OneWay相反)5:Default(可以单向或双向,是靠被值定的源或目标是否有get或set来指定的)WPF UpdateSourceTrigger 枚举值有4个1:Default2:PropertyChanged(绑定的属性值改变,源会立即更新)3:LostFocus转载 2021-05-18 10:07:00 · 657 阅读 · 0 评论 -
MvvMLight中Messager的用法
MvvMLight中的Messager就是两个类之者进行通信的助手,不管这两个类的类别是某个自定义控件、某个窗体类或者ViewModel类。用法是分为三步:第一步注册Messager,第二步发送消息,第三步接收消息。//注册的时候,会顺带传入一个方法,该方法用来处理接收到的消息//通常在构造函数中注册Messenger.Default.Register<string>(this, "暗号", MethodName);//这个方法表示将收到的消息进行逻辑处理private原创 2021-05-14 14:16:04 · 651 阅读 · 2 评论