打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# WPF后台动态添加控件(经典)

概述

      在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:点击后显示图片的名称.

运行演示

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
WPF中获取动态添加控件的ActualHeight和相对坐标
WPF控件简单总结(转载)
Extended WPF Toolkit? Community Edition
如何使用WPF做一个变频器调试软件
WPF控件操作之改变父控件之TabControl示例
WPF E 文章汇总
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服