C#和WPF实现图形化编程-实现图形代码的显示

更新时间:2023-07-04 15:08:13 阅读: 评论:0

C#和WPF实现图形化编程-实现图形代码的显⽰
基于WPF的图形代码的显⽰
代码树的基本结构
中讲解了代码树分为Expression和Statement两种基本结构,⽐如a+b是个⼆分法表达式,⽽c=a+b;是个赋值语句,⼀个Statement或者expression,可以由多个expression组成。
代码节点的显⽰
代码节点expression和statement都要重载相应的⽅法,以获取节点的结构
Expression必须重载 Descriptor Descriptor { get; }⽅法
Statement必须重载 Descriptor Descriptor { get; }和 BlockDescriptor BlockDescriptor { get; }⽅法
Descriptor是代码基本结构的数组,⽐如a+b,基本结构包括三部分,表达式a,+号和表达式b,表达式显⽰控件会根据结构数组进⾏显⽰,⽐如表达式a和b⽤⽂本框显⽰,+号⽤⽂本标签显⽰,这样就完成了表达式的显⽰。
BlockDescriptor表⽰语句除了第⼀⾏后⾯的结构。
⽐如for循环,语句定义是
for(init; test; update){
statement block
}
要包含init、test和update三个表达式,和⼀个内部循环语句,具体代码定义如下:
public Expression Init {get;t;}
public Expression Test {get;t;}
public Expression Update {get;t;}
public BlockStatement Body {get;t;}=new BlockStatement();
飞机液压系统
Descriptor要定义第⼀⾏的结构,显⽰三个表达式
public override Descriptor Descriptor
{
get持之以恒的作文
{
Descriptor desc =new Descriptor();
desc.Add(new TextItemDescriptor(this,"for",true));
desc.Add(new TextItemDescriptor(this,"("));
desc.Add(new ExpressionDescriptor(this,"Init","number"){ AcceptVariableDeclaration =true});
desc.Add(new TextItemDescriptor(this,";"));
desc.Add(new ExpressionDescriptor(this,"Test","boolean"){ IsOnlyNumberAllowed =fal});
desc.Add(new TextItemDescriptor(this,";"));
desc.Add(new ExpressionDescriptor(this,"Update","number"));
desc.Add(new TextItemDescriptor(this,")"));
复合大师return desc;
}
}
BlockDescriptor定义循环代码,
public override BlockDescriptor BlockDescriptor
{
get
{
BlockDescriptor blockDescript =new BlockDescriptor();
blockDescript.Add(new BlockStatementDescriptor(this,"Body"));
天秤座的男人
return blockDescript;
}
}
这样Statement显⽰控件,根据Descritor显⽰第⼀⾏,然后根据BlockDescriptor显⽰后边结构,这样for语句就可以显⽰下边图⽚的样⼦。
使⽤WPF实现代码的显⽰
由于Expression和Statement显⽰结构式⼀个数组,所以可以WPF的ItemsControl来负责显⽰,对于每种显⽰基本结构,可以通过DataTemplate定义其对应的显⽰,
卤肉配料
⽐如⽂本可以通过⼀个TextBox负责其显⽰
胃火大口臭怎么治<DataTemplate DataType="{x:Type script:TextItemDescriptor}">
<TextBlock Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}"
台式机内存条Foreground="{Binding Path=IsKeyword, Converter={StaticResource KeywordForegroundConverter}}"
FontWeight="{Binding Path=IsKeyword, Converter={StaticResource KeywordFontWeightConverter}}"
VerticalAlignment="Center" Padding="0" HorizontalAlignment="Center"
Focusable="Fal" Margin="0" Text="{Binding Path=Text}"/>
</DataTemplate>
⽽表达式中的表达显⽰,除了显⽰表达式,还能能够接受表达式,也能显⽰⽂本
<DataTemplate DataType="{x:Type script:ExpressionDescriptor}">
<local:TextBoxExpressionHolder ExpressionDescriptor="{Binding}" BkColor="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Ba ckground}"/>
</DataTemplate>
因此,我们⽤⼀个控件显⽰表达式(ExpressionControl),⼀个控件显⽰表达式中的表达式(TextBoxExpressionHolder),⼀个控件显⽰语句(StatementControl),得益于WPF的属性结构(和代码树结构相同)和显⽰等特性,很容易实现表达式的显⽰和操作。
更多编辑功能的实现
作为⼀个图形编程编辑器,除了代码的显⽰,更重要的编辑,为了让编码更加简单,还需要⾮常多的功能,⽐如代码折叠、代码复制粘贴、函数调⽤和编辑等,所以还需要其他⼀些辅助类型。具体可以参考githup中的源码,代码地址。实现的代码的显⽰、编辑、序列化和解释运⾏致富农村
同时,为了让图形代码更加强⼤,我们实现了⾯向对象、模块化(使⽤⾃⼰代码作为类库)、多线程、EV3和Arduino控制、Scratch、画板等,⼏乎涵盖了所有代码基础知识,也增加了很多有趣的例⼦,⽐如和,让代码学习能够更加直观和有趣,可以从中下载使⽤

本文发布于:2023-07-04 15:08:13,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1067583.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:代码   实现   结构
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图