Canvas 控件

news/发布时间2024/5/15 5:49:19

在C#中中设置控件坐标

Label label = new Label
{Content = "测试",FontSize = 14,Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF0000"))
};Canvas.SetTop(label, 10.9);//在c#后台代码中动态设置
Canvas.SetLeft(label, 20.39);printArea.Children.Add(label);

这种方式适合动态增加控件的页面。

动态创建控件

1.容器控件.RegisterName("Name",要注册的控件)   //注册控件

2.容器控件.FindName("Name") as  控件类型            //找到控件并转换成相应类型

注意:仅通过 控件.Name来设置是不能通过FindName来找到控件的,必须注册
动态删除控件
1.容器控件.Children.Remove(控件)                           //移除控件

2.容器控件.UnregisterName("Name")                       //取消注册

其它设置

1.控件.SetValue(Grid.RowProperty, 0);                    //设置控件在Grid面板中的行数
   控件.SetValue(Grid.ColumnProperty, 1);               //设置控件在Grid面板中的列数

2.Canvas.SetLeft("控件名", 50);                                //设置控件在Canvas面板中的横坐标
   Canvas.SetTop("控件名", 50);                                //设置控件在Canvas面板中的纵坐标

 

mvvm 模式下,Canvas 实现动态添加元素

view

 

 <ItemsControl Margin="0,0,0,20" ItemsSource="{Binding Balloons}" x:Name="canvasBackground" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="2"><ItemsControl.ItemsPanel><ItemsPanelTemplate><!-- IsItemsHost=true表示子元素将显示在此容器中。--><Canvas IsItemsHost="True"/></ItemsPanelTemplate></ItemsControl.ItemsPanel><ItemsControl.ItemContainerStyle><Style><!-- Canvas.Left\Canvas.Top对应ViewModel中的X\Y属性,--><Setter Property="Canvas.Left" Value="{Binding X}"/><Setter Property="Canvas.Top" Value="{Binding Y}"/></Style></ItemsControl.ItemContainerStyle></ItemsControl>

 ViewModel

 internal partial class BalloonViewModel : ObservableObject {
///其他代码/// <summary>/// 坐标点/// </summary>/// 
 [ObservableProperty]public double? x;[ObservableProperty]public double? y;
}

只需少量更改即可使用<Canvas IsItemsHost=“True” />,    IsItemsHost=true表示子元素将显示在此容器中。

Canvas 矢量图形布局

如果希望Path的各个部分使用不同的颜色,就需要创建彼此独立的Path对象。 此时就需要使用View+Canvas+path的组合方式 来设计复杂的矢量图形。

注意必须给canvas设置一个初始的 Width Height的,否则无法显示。

 

     <Viewbox  Stretch="Uniform"  ><Canvas Width="80" Height="220" ><!--球体--><Path  Canvas.Left="0" Canvas.Top="0"  Fill="{Binding BalloonColor}"    Data="M57.078,140.071h6.175L69,153l-18.054-.946ZM61,0c33.689,0,61,31.34,61,70s-27.311,70-61,70S0,108.66,0,70,27.311,0,61,0Z"  /><!--反光--><Path   Fill="{Binding  ReflectLight}" Data="M33.978,35.095c6.638,1.091,10.462,11.335,8.542,22.881S33.66,78,27.022,76.905,16.56,65.57,18.48,54.025,27.34,34,33.978,35.095Z"   /><!--线条--><Path   StrokeThickness="4" Stroke="{Binding  Line}" Data="M62,152c-4.764,15.394-5.243,29.971,0,43,2.406,5.98,7.875,14.606,14,23,4.172,5.717,6.546,9.83,8,16,3.84,16.294-3.737,52.7-11,67" /></Canvas></Viewbox>

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

正则表达式

正则表达式网站教程:https://www.runoob.com/regexp/regexp-metachar.html 学习视频:https://www.bilibili.com/video/BV1mt4y1o7Rh/?spm_id_from=333.788&vd_source=432ba293ecfc949a4174ab91ccc526d6 正则表达式介绍: 正则表达式是一种用于匹配和操作文本的工具 常用…

UVM - 12(driver and monitor 练习)

uvm exercise-1实现apb_sequencer.sv,传输数据类型式abp_trans 实现virtual sequencer.sv,定义两个sub sequencer:mst_sqr,slv_sqrclass abp_sequencer extends uvm_sequencer #(apb_trans);`uvm_component_utils(apb_sequencer);function new(string name,uvm_component paren…

软件工程——代码泛读结对

一、练习要求(主要是将项目上传至gitee) 1.源码组织方式(给出仓库地址): (1) 创建针对本作业的项目和软件版本库,在版本库中建立“src”和“doc”两个文件夹,分别存储软件系统的源代码和报告文档 (2) 建立master、develop以及成员分支(a_branch),将当前版本存入master目…

使用 WXT 开发浏览器插件(上手使用篇)

WXT (https://wxt.dev/), Next-gen Web Extension Framework. 号称下一代浏览器开发框架. 可一套代码 (code base) 开发支持多个浏览器的插件. 上路~ WXT 提供了脚手架可以方便我们快速进行开发,但是我们得先安装好环境依赖,这里我们使用 npm, 所以需要安装下 node,可以参考…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的安全帽检测系统(深度学习模型+UI界面代码+训练数据集)

开发先进的安全帽识别系统对提升工作场所的安全性至关重要。本文详细介绍了使用深度学习技术创建此类系统的方法,并分享了完整的实现代码。系统采用了强大的YOLOv8算法,并对其与YOLOv7、YOLOv6、YOLOv5的性能进行了详细比较,包括关键指标如mAP、F1 Score等。文章深入分析了Y…

SAP:检索帮助扩展

TABLES参数已过时!(TABLES parameters are obsolete!) 一般解决方法: TABLES 参数已过时!把 TYPE 改成 LIKE 多回车,就可以保存了。检索帮助扩展(Search Help Exit)中可以指定函数修改检索帮助的查询条件及结果数据。 首先创建函数后练习将此函数分配到检索帮助扩展中的实例…