继续聊WPF——数字墨迹B

2024-03-20 01:38
文章标签 继续 数字 wpf 墨迹

本文主要是介绍继续聊WPF——数字墨迹B,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面的内容,我们用简单的方法就创建了一个手写板示例,下面,我们再来做一个更为复杂一点的手写板程序。示例程序有两个选项:选择“书写”可以进行手写输入,选择“擦除”,可以去掉不必要的部分,类似橡皮擦的功能。
并且,还可以选择笔触颜色。
首先就是放一个InkCanvas控件,相信都没问题,很简单。
    <Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<InkCanvas x:Name="myInc" Grid.Row="0" Margin="2" />
......... 
</Grid>

接着定义两个类,分别用来保存笔尖颜色的自定义类和集合。
    public class MyColor
{
public string ColorName { get; set; }
public SolidColorBrush UserColor { get; set; }
} 
public class MyColors : ObservableCollection<MyColor>
{
public MyColors()
{
Add(new MyColor { ColorName = "红", UserColor = new SolidColorBrush(Colors.Red) });
Add(new MyColor { ColorName = "黄", UserColor = new SolidColorBrush(Colors.Yellow) });
Add(new MyColor { ColorName = "蓝", UserColor = new SolidColorBrush(Colors.Blue) });
}
} 

切换到XAML视图,把MyColors作为静态资源嵌入到窗体的资源列表中。
并定义一个数据模板,用于在ListBox中显示的项。
 
    <Window.Resources>
<m:MyColors x:Key="bindColors" />
<DataTemplate x:Key="itemTmp" DataType="{x:Type m:MyColor}">
<StackPanel Orientation="Horizontal">
<Rectangle Height="10" Width="20" Fill="{Binding UserColor}"/>
<TextBlock Text="{Binding ColorName}"/>
</StackPanel>
</DataTemplate>
</Window.Resources> 

声明两个RadioButton元素,用于选择手写输入状态。以及一个ListBox控件,数据源就是我们刚才定义的MyColors类。
        <StackPanel Grid.Row="1" Margin="1" Orientation="Horizontal">
<RadioButton x:Name="rdWrite" IsChecked="True" VerticalAlignment="Center"
Content="书写" Checked="rdWrite_Checked" Margin="3,0"/>
<RadioButton x:Name="rdEra" VerticalAlignment="Center" IsChecked="{x:Null}" Content="擦除" Checked="rdEra_Checked" Margin="8,0" />
<ListBox x:Name="myListBox" Margin="12,0" ItemTemplate="{StaticResource itemTmp}" ItemsSource="{StaticResource bindColors}"
SelectionChanged="myListBox_SelectionChanged">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</StackPanel> 

为了能让ListBox中的项水平排列,我们要自定义项的面板。
 
                    <ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>

为两个单选按钮编写事件处理程序。
        private void rdWrite_Checked(object sender, RoutedEventArgs e)
{
this.myInc.EditingMode = InkCanvasEditingMode.InkAndGesture;
} 
private void rdEra_Checked(object sender, RoutedEventArgs e)
{
this.myInc.EraserShape = new EllipseStylusShape(6, 6);
this.myInc.EditingMode = InkCanvasEditingMode.EraseByPoint;
} 

 
修改InkCanvas的EditingMode属性,可以控制其编辑状态,如接收墨迹,或擦除墨迹。
 
最后,编写ListBox的事件处理程序,以动态修改笔触的颜色。
 
        private void myListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count == 0)
{
return;
}
MyColor mc = e.AddedItems[0] as MyColor;
if (mc != null)
{
myInc.DefaultDrawingAttributes.Color = mc.UserColor.Color;
}
} 

这篇关于继续聊WPF——数字墨迹B的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/827896

相关文章

使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

《使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案》在SpringBoot应用中,我们经常使用​​@Cacheable​​注解来缓存数据,以提高应用的性能... 目录@Cacheable注解Redis时,Redis宕机或其他原因连不上,继续调用原方法的解决方案1

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人