C# WPF后台动态添加控件实战教程
作者:zls366 时间:2022-07-29 18:52:51
概述
在Winform中从后台添加控件相对比较容易,但是在WPF中,我们知道界面是通过XAML编写的,如何把后台写好的控件动态添加到前台呢?本节举例介绍这个问题。
这里要用到UniformGrid布局,UniformGrid 是一种横向的网格分割、纵向的网格分割分别是均等的分割的布局类型.
项目介绍
-. 这里界面添加一个ComboBox用来下拉选择图片数量;
-. 添加一个button用来执行图片显示;
dispaly下方是图片显示区域
代码设计
-.前台XAML代码:
<Grid>
<dxlc:LayoutControl Orientation="Vertical">
<dxlc:LayoutGroup Orientation="Horizontal" View="GroupBox">
<dxlc:LayoutGroup.Header>
<dxlc:LayoutItem Label="Action" Background="#FF004486" Foreground="White"/>
</dxlc:LayoutGroup.Header>
<dxlc:LayoutItem Label="Image Count" >
<ComboBox SelectedIndex="{Binding ComSelectedIndex}">
<ComboBoxItem>2</ComboBoxItem>
<ComboBoxItem>4</ComboBoxItem>
<ComboBoxItem>6</ComboBoxItem>
</ComboBox>
</dxlc:LayoutItem>
<dxlc:LayoutItem Width="110">
<dx:SimpleButton Content="Image Dispaly" Background="LightGray"
cal:Message.Attach="[Event Click]=[btnAdd_Click($source,$eventArgs)]" />
</dxlc:LayoutItem>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup Orientation="Horizontal" View="GroupBox">
<dxlc:LayoutGroup.Header>
<dxlc:LayoutItem Label="Dispaly" Background="#FF004486" Foreground="White"/>
</dxlc:LayoutGroup.Header>
<UniformGrid
cal:Message.Attach="[Event Loaded]=[UniformGrid_Loaded($source,$eventArgs)]" />
</dxlc:LayoutGroup>
</dxlc:LayoutControl>
</Grid>
前台代码比较简单,只要关注下UniformGrid控件,绑定了Loaded事件。
-.后台代码:
[AddINotifyPropertyChangedInterface]
public class UniformGridViewModel : Screen, IViewModel
{
public int ComSelectedIndex { get; set; }
public UniformGrid UniformGrid;
public string[] ImageFullPath;
public void btnAdd_Click(object sender, RoutedEventArgs e)
{
UniformGrid.Children.Clear();
UniformGrid.Columns = 2;
var count = 0;
switch(ComSelectedIndex)
{
case 0:
count = 2;break;
case 1:
count = 4; break;
case 2:
count = 6; break;
default: break;
}
for (int i = 0; i < count; i++)
{
Image image = new Image();
image.Source = LoadImageFreeze(ImageFullPath[i]);
image.MouseLeftButtonUp += ImageClick;
image.Name = Path.GetFileNameWithoutExtension(ImageFullPath[i]);
image.Margin = new Thickness(5);
UniformGrid.Children.Add(image);
}
}
public void ImageClick(object sender, MouseButtonEventArgs e)
{
var name = (sender as Image).Name;
MessageBox.Show($"当前选择的图片名称:{name}");
}
public void UniformGrid_Loaded(object sender, RoutedEventArgs e)
{
UniformGrid = (UniformGrid)sender;
}
public UniformGridViewModel()
{
DisplayName = "UniformGrid";
string imagePath =Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "Images");
ImageFullPath = Directory.GetFiles(imagePath, "*.png");
}
public static BitmapImage LoadImageFreeze(string imagePath)
{
try
{
var bitmap = new BitmapImage();
if (File.Exists(imagePath))
{
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
using (Stream ms = new MemoryStream(File.ReadAllBytes(imagePath)))
{
bitmap.StreamSource = ms;
bitmap.EndInit();
bitmap.Freeze();
}
}
return bitmap;
}
catch (Exception)
{
return null;
}
}
}
介绍:
①LoadImageFreeze:从路径下加载图片并转换为BitmapImage;
②UniformGrid_Loaded;获取UniformGrid对象;
③ImageFullPath:从项目bin下获取图片文件并读取到这个数组;
④btnAdd_Click:界面button点击事件,这里是核心的代码,主要就是申城图片,然后设定好 UniformGrid的行列以及其他属性后添加到控件里面, UniformGrid.Children.Add(image);
⑤ImageClick:点击后显示图片的名称.
源码
点击这里下载
来源:https://www.cnblogs.com/zls366/p/16274135.html
标签:wpf,控件,C#
0
投稿
猜你喜欢
Java实现求数组最长子序列算法示例
2023-09-28 12:35:14
Android编程之页面切换测试实例
2022-04-03 22:13:11
Android三种方式实现ProgressBar自定义圆形进度条
2021-09-15 11:19:43
Java swing五子棋的实现方法
2021-06-01 15:25:20
Spring AOP面向切面编程实现原理方法详解
2021-07-22 00:26:07
Java中双大括号初始化的理解与使用
2023-08-30 08:44:55
Android中隐藏状态栏和标题栏的方法汇总(隐藏状态栏、标题栏的五种方法)
2022-05-18 07:31:03
C#将布尔类型转换成字节数组的方法
2023-06-21 15:30:16
Android实现图片自动切换功能(实例代码详解)
2022-11-10 00:30:37
springboot打包部署到linux服务器的方法
2021-09-26 14:56:14
字符串内存驻留机制详解示例
2023-09-24 04:09:32
Android实现页面短信验证功能
2022-02-13 01:36:56
java框架之maven是用来做什么的
2023-04-20 21:59:43
使用@PropertySource读取配置文件通过@Value进行参数注入
2021-11-21 13:21:03
C#与C++之间类型的对应知识点总结
2023-09-07 21:02:56
详解spring boot rest例子
2021-06-02 21:54:46
Java面试题冲刺第二十六天--实战编程
2023-05-22 16:01:54
C++实现幸运大抽奖(QT版)
2021-09-15 21:32:00
SpringBoot整合SpringTask实现定时任务的流程
2022-03-28 22:24:40
C#采用递归实现阶乘的方法
2022-12-09 09:24:56