WPF文本框控件RichTextBox实现MVVM绑定数据源

编程开发
624
WPF
RichTextBox
MVVM
桌面截屏控件

WPF文本框控件RichTextBox实现MVVM绑定数据源

前些日子又开发了一款windows离线版的桌面截图ocr识别软件(TK截屏精灵)来解决自己的一些需求(主要是网上的基本都是需要联网或者限制使用次数的),界面基于wpf实现了桌面截图框选功能,功能做的非常简单,除了内存占用比较高之外(毕竟是离线的 识别速度快慢也和本机配置直接挂钩)平时用着感觉还挺好用的,开发过程比较有记录价值的有两点。

1. 桌面截屏控件的实现的思路(右侧有相关wpf源码下载)

一直以来很好奇qq桌面截图之类的功能是怎么实现的,就是那种点击快捷按键屏幕就会变全屏灰色遮罩,然后周边框选的矩形区域显示原来的颜色的效果即需要框选的区域。

这里记一下wpf下大致实现思路(想通了其实也很简单): 首先创建一个透明遮罩窗体(可通过快捷键唤起),其上四遍各放置一个矩形遮罩控件填充黑色 并设置透明色实际框,通过鼠标坐标点控制遮罩的宽高,选区域其实就是四个遮罩控件中间的暴露区域,通过调节四个个矩形的大小就可以相应的控制中间截图区域的位置和大小,以下是实现的效果

桌面截屏控件的实现的思路

2. RichTextBox实现MVVM绑定的方法实现

WPF里的RichTextBox控件本身是不支持MVVM绑定的,通过以下代码即可实现

public class RichTextBoxHelper : DependencyObject
    {
        public static string GetRichText(DependencyObject obj)
        {
            return (string)obj.GetValue(RichTextProperty);
        }

        public static void SetRichText(DependencyObject obj, string value)
        {
            obj.SetValue(RichTextProperty, value);
        }
        public static readonly DependencyProperty RichTextProperty =
            DependencyProperty.RegisterAttached("RichText", typeof(string), typeof(RichTextBoxHelper), new FrameworkPropertyMetadata
            {
                BindsTwoWayByDefault = true,
                PropertyChangedCallback = (obj, e) =>
                {
                    var richTextBox = (RichTextBox)obj;
                    var text = GetRichText(richTextBox);
                    richTextBox.AppendText(text);
                    richTextBox.AppendText(Environment.NewLine);
                    richTextBox.ScrollToEnd();
                }

            });
    }

XMAL 页面使用

<RichTextBox VerticalScrollBarVisibility="Auto"  Grid.Column="1"  common:RichTextBoxHelper.RichText="{Binding  Model.Text,Mode=TwoWay}" Style="{StaticResource ImageTextBox}" >RichTextBox>
WPF实现窗体接收鼠标拖拽的文件例子
一次使用AutoResetEvent的经历:在Task并发环境下导致UI线程卡死 内存一直上涨
WPF桌面程序开发怎么实现鼠标窗体穿透点击桌面
在.NET CORE\.NET 5 下WPF如何实现托盘图标功能
WPF中某一个控件绑定其他指定UI控件的属性值
.NET 5 WPF 如何开启控制台界面用于实时输出日志
KnockoutJS用法 html+js实现mvvm
.NET程序系统托盘运行出现多个同样的托盘图标的解决方法
Windows桌面开发优秀的WPF界面开源UI组件 MahApps.Metro
WPF 设置程序不允许同一类程序多开进程
WPF引用CommunityToolkit.Mvvm实现属性变动双向绑定的简单例子
WPF使用popup控件实现弹出式提示
暂无相关内容...
C#+WPF实现模仿实现的网易云音乐客户端源码
WPF实现的自定义工作大日历排班Calendar控件模板的例子源码
wpf实现大屏幕弹幕播放效果特效源码新手可参考下.rar
[人脸检测]基于C#OpenCvSharp+haarcascade人脸、人眼模型实现人脸检测源码
WPF实现读取USB摄像头实时视频展示以及导出实时截图的C#源码例子
免责声明 部分转载分享内容若侵犯您的权益,还请 邮件联系 侵删