WPF开发txt阅读器7:自定义文字和背景颜色

news2024/11/18 3:24:47

文章目录

    • 添加控件
    • 具体实现
    • 代码说明

txt阅读器系列:

  • 需求分析和文件读写
  • 目录提取类💎列表控件与目录
  • 字体控件绑定
  • 书籍管理系统💎用树形图管理书籍

添加控件

除了字体、字体大小之外,文字和背景颜色也会影响阅读观感,其设置方法与选择字体如出一辙,都通过combobox控件来选择。故而在阅读设置里面添加

<StackPanel x:Name="color" Orientation="Horizontal">
    <TextBlock Text="前景"/>
    <ComboBox x:Name="cbForeColor" Width="105"/>
    <TextBlock Text="背景"/>
    <ComboBox x:Name="cbBgColor" Width="105"/>
</StackPanel>

具体实现

考虑到C#中封装的大多数颜色,其实我们都不太认识,为了更加直观,故而在ComboBox中的每个选项都赋上对应的颜色,其对应的C#代码为

using System.Reflection;

public void init()
{
    foreach (var fm in Fonts.SystemFontFamilies)
        cbFont.Items.Add(fm.Source);
    cbFont.SelectedIndex = 0;

    var cs = typeof(Brushes)
        .GetProperties(BindingFlags.Static | BindingFlags.Public)
        .Select(x => x.Name )
        .ToArray();

    int i;
    int iWhite = Array.IndexOf(cs, "White");
    int iBlack = Array.IndexOf(cs, "Black");

    cbForeColor.ItemsSource = cs.Select(
        x => new ComboBoxItem { Content = x });
    cbForeColor.SelectedIndex = iBlack;

    cbBgColor.ItemsSource = cs.Select(
        x => new ComboBoxItem { Content = x });
    cbBgColor.SelectedIndex = iWhite;

    var bc = new BrushConverter();
    foreach (ComboBoxItem item in cbForeColor.Items)
        item.Background = (SolidColorBrush)bc.ConvertFromString(
            item.Content.ToString());
    
    foreach (ComboBoxItem item in cbBgColor.Items)
        item.Background = (SolidColorBrush)bc.ConvertFromString(
            item.Content.ToString());
}

代码说明

其中,typeof(Brushes).GetProperties是C#的反射功能,可以返回某个类的所有属性。其中BindingFlags.Static | BindingFlags.Public表示只返回静态公共属性。

然后调用Select,提取出这些属性的Name,最后将其转为数组,赋值给cs

由于想为ComboBox中的每一项都填上不同的颜色,而字符串本身并没有颜色这个属性,所以不能直接将ItemsSource设置为cs,而要将所有字符串封装在ComboBoxItem中。

然后,遍历这些ComboBoxItem,将其背景色设置为其名字对应的颜色。

最后,修改txt控件的前景色和背景色,在xaml代码中加入

Foreground="{Binding SelectedItem.Content, ElementName=cbForeColor}"
Background="{Binding SelectedItem.Content, ElementName=cbBgColor}"

效果如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/636386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s中的PVC为何需要延迟绑定?(WaitForFirstConsumer)

文章目录 背景为什么需要延迟绑定延迟绑定的原理storgeageClass yaml配置 背景 有一个pod, 使用的pvc叫pvc-1&#xff0c; 我们希望它只运行在node-2上&#xff0c;在当前的集群中存在两台主机符合pod的pvc的要求, 假如node-1上是pv-1&#xff0c; node-2上是pv-2&#xff0c;…

stm32读取DHT11温湿度传感器

stm32读取DHT11温湿度传感器 一.序言二.DHT11响应数据格式三.DHT11通讯过程3.1 产生起始信号3.2 读取数据03.3 读取数据1DHT11停止信号 四.代码实例4.1读取DHT11源文件4.2 读取DHT11头文件 五.结语5.1 总结整体思路5.2 对读者的期望 一.序言 我们知道DHT11是单总线协议&#x…

单体、SOA、微服务的介绍

本文涉及的内容以及知识点如下&#xff1a; 1、单体架构 2、单体架构的拆分 3、SOA与微服务的区别 4、微服务的优缺点 5、微服务的消息 6、服务集成 7、数据的去中心化 目录 单体架构单体架构的拆分 SOA与微服务 微服务的优缺点微服务消息服务集成数据去中心化 单体架构 Web应用…

springboot+vue.js汽车销售网站il05r

本靓车汽车销售网站管理员功能有个人中心&#xff0c;用户管理&#xff0c;车辆展示管理&#xff0c;车辆品牌管理&#xff0c;车辆型号管理&#xff0c;维修材料管理&#xff0c;材料分类管理&#xff0c;用户交流&#xff0c;留言板管理&#xff0c;系统管理&#xff0c;订单…

国产openeuler22.03容器环境下固定容器IP的实例

Docker 中默认的容器网络为名为bridge的桥接网络&#xff0c;使用DHCP协议&#xff0c;不能固定容器IP&#xff0c;每次重启&#xff0c;容器的IP是按其启动顺序来分配的&#xff0c;单宿主机多容器时&#xff0c;容器的IP就会发生变化&#xff0c;不利于程序 连接及安全加固配…

Ada Tutorial(1):Ada基础——wordcount程序

文章目录 Ada 常用的库和方法Ada.Characters.Handling字符类型函数转换函数 Ada 基础语法概览数据类型和子类型类型&#xff08;Type&#xff09;子类型&#xff08;Subtype&#xff09;类型和子类型的区别常用类型转换方法显示类型转换类型相关函数 循环语句无条件循环 (Loop)…

探索智慧档案的发展路径,开源网安受邀参加国际档案日专题讲座

近日&#xff0c;深圳市档案学会举办了“奋进新征程&#xff0c;兰台谱新篇”2023年国际档案日专题讲座。开源网安常务副总经理王颉博士受邀参加此次讲座&#xff0c;分享了《档案信息安全实务&#xff1a;时代与展望》&#xff0c;从软件供应链安全的维度为到场人员讲解了数字…

Vue3 ElementPlus Dialog封装 (一:使用props emit)

引言 多个页面中需要录入用户数据&#xff08;弹窗内容相同&#xff09;&#xff0c;重复写弹窗代码比较繁琐。因此封装一下组件&#xff0c;使用效果如下&#xff1a; 本例中模型较简单&#xff0c;记录下使用方法和原理 实现原理 参考VUE官方两个例子&#xff0c;基本父子件…

调试CAN过滤器功能使用笔记

一.关于CAN过滤器的配置及使用 提示&#xff1a;此处使用的是雅特力的芯片&#xff08;基本兼容stm32的芯片&#xff09; 这里只讲32位宽的过滤器&#xff0c;16位的用法基本相同&#xff0c;注意因为位数减少数据不一样。 1.1首先过滤器有两种工作模式&#xff1a; 1.标识符…

Rust每日一练(Leetday0025) 矩阵置零、搜索二维矩阵、颜色分类

目录 73. 矩阵置零 Set Matrix Zeroes &#x1f31f;&#x1f31f; 74. 搜索二维矩阵 Search A 2d-Matrix &#x1f31f;&#x1f31f; 75. 颜色分类 Sort Colors &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang…

逻辑回归与决策树回归

逻辑回归 逻辑回归函数: 逻辑回归分析属于概率型回归分析方法。 假设在自变量xi1、xi2…xip的作用下&#xff0c;因变量y取值为1和0的二值变量&#xff0c;其取值为1的概率为pi&#xff0c;则可以表示为&#xff1a; 相反&#xff0c;y取值为0的概率即&#xff1a; 对y取值为…

FlinkSql 使用总结

一、FlinkSQL底层实现理解 FlinkSQL在flink Framework的位置 Flink Table & SQL API是在DataStream和DataSet之上封装的一层高级API。由于DataStream和DataSet有各自的API&#xff0c;开发起来又有些困难&#xff0c;如果只是应对一些相对通用的需求会有点麻烦。而Flink T…

【AUTOSAR】UDS协议的代码分析与解读(一)----测试UDS协议DID的填写与读取

测试环境配置 Environment-1: Trace32配置&#xff08;内核选择&#xff09; Environment-2: Dgs上位机配置&#xff08;报文发送&#xff09; AV012 Dgs密码 &#xff1a;hsae_dgs 配置请求ID和响应ID可以去代码中查看&#xff0c;备注型号和设备类别&#xff0c;选择售后烧…

一款集成了多种老牌工具字典的轻量级目录扫描器

功能 dirxk&#xff0c;一款集成了多种老牌工具字典的轻量级目录扫描器&#xff0c;包括御剑后台扫描字典&#xff0c;test404网站备份&#xff0c;web破壳扫描器&#xff0c;御剑1.5扫描字典&#xff0c;御剑专业版字典&#xff0c;wwwscan字典&#xff0c;dirscan字典&#…

ceph块存储使用总结

ceph块存储使用总结 大纲 ceph osd pool池创建 & 更新osd pool关联应用删除ceph osd pool使用ceph块存储自动挂载扩容 本次测试相关环境与软件&#xff1a; ceph15.2.17 Octopuseph-deploy 2.0.1ubuntu18.04.6 ceph osd pool池 基础概念 Ceph 将数据存储在存储池中。…

Hive存储格式

hive的存储格式 hive的存储格式分为两大类&#xff1a;一类纯文本文件&#xff0c;一类是二进制文件存储。 第一类&#xff1a; 纯文本文件存储 textfile: 纯文本文件存储格式&#xff0c;不压缩&#xff0c;也是hive的默认存储格式&#xff0c;磁盘开销大&#xff0c;数据解…

3. 说说Java“锁“事

3.1 从轻松的乐观锁和悲观锁开讲 ● 悲观锁&#xff1a; 认为自己在使用数据的时候一定有别的线程来修改数据&#xff0c;因此在获取数据的时候会先加锁&#xff0c;确保数据不会被别的线程修改&#xff0c;synchronized和Lock的实现类都是悲观锁&#xff0c;适合写操作多的场…

WhaleHiking的“三山五岳”第一站:泰山

Datawhale团队 来源&#xff1a;whaleHiking 开场白 大家应该都听说过杜甫的《望岳》——“会当凌绝顶&#xff0c;一览众山小。”&#xff0c;每次看见这句诗的时候&#xff0c;总想去泰山看一看&#xff0c;感受诗中的壮美山河景色&#xff01; 机不可失时不再来&#xff0c…

JVM图解

JVM图解 一、JVM的运行时数据区 概览JVM运行时数据区主要包括以下几个部分&#xff1a;程序计数器、虚拟机栈、本地方法栈、方法区、堆&#xff1b;其中 栈是运行时的单位&#xff0c;而堆是存储的单位&#xff01; 1.程序计数器 程序计数器可以看作是当前线程所执行的字节码…

调用阿里API实现银行卡实名认证

调用阿里API实现银行卡实名认证 1&#xff0e;作者介绍2&#xff0e;算法介绍2.1 阿里云技术介绍2.2 API介绍 3&#xff0e;实验代码3.1 调用阿里云API流程3.2 代码实现3.2.1完整代码3.2.2实验结果 4&#xff0e;报错分析5&#xff0e;参考链接 1&#xff0e;作者介绍 薛维哥&…