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

本文探讨了在WPF中如何从后台动态添加控件,与Winform相比,WPF界面由XAML定义,操作更具挑战。示例中使用UniformGrid布局,并详细介绍了代码设计过程,包括ComboBox用于选择图片数量,按钮执行图片显示,以及关键的后台代码实现,如图片加载、UniformGrid控件的操作等。

概述

      在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 Cou
C# WPF应用程序中,可以通过后台代码动态设置 `Image` 控件的源图片。以下是几种常见的方式来实现这一功能: ### 1. 使用绝对路径加载本地图片 可以使用系统的绝对路径来加载图像资源,并将其绑定到 `Image` 控件的 `Source` 属性上。 ```csharp string path = System.Environment.CurrentDirectory + "\\logo.png"; BitmapImage image = new BitmapImage(new Uri(path, UriKind.Absolute)); logo.Source = image; // logo 是 Image 控件的名称 ``` 该方法适用于图片存储在程序运行目录下的场景,能够确保程序正确找到并加载图像[^1]。 --- ### 2. 使用相对路径或资源路径绑定图片 WPF 支持通过资源路径的形式引用项目中的图片资源,通常格式为 `"/[项目名称];Component/[资源路径]"`。这种方式适合将图片嵌入到项目资源中。 例如,在 XAML 中可以这样定义: ```xml <Image Source="/Demo;Component/Images/Test.jpg" /> ``` 而在后台代码中,也可以通过以下方式动态设置: ```csharp Uri uri = new Uri("/Demo;Component/Images/Test.jpg", UriKind.Relative); BitmapImage bitmap = new BitmapImage(uri); imageControl.Source = bitmap; ``` 这种形式更适合 MVVM 模式下的数据绑定,避免了直接操作 UI 元素,降低了视图和逻辑之间的耦合性[^2]。 --- ### 3. 动态设置 Image 控件的 Source 属性 可以在代码中封装一个属性来控制 `Image` 控件的图像源,从而支持更灵活的数据绑定机制。 ```csharp public ImageSource Photo { get { return this.imgPhoto.Source; } set { this.imgPhoto.Source = value; } } public Uri PhotoUri { set { BitmapImage img = new BitmapImage(); img.BeginInit(); img.UriSource = value; img.EndInit(); this.imgPhoto.Source = img; } } ``` 通过 `Photo` 或 `PhotoUri` 属性,可以在运行时动态更改图像内容,同时保持良好的封装性和可维护性[^3]。 --- ### 4. 创建新的 Image 实例并设置其 Source 如果需要在后台动态创建 `Image` 控件实例,可以直接构造对象并设置其属性: ```csharp var imageControl = new Image { Source = new BitmapImage(new Uri("图片存储路径", UriKind.RelativeOrAbsolute)), Width = 60, Height = 60, Tag = "fileName" }; ``` 这种方式适合需要动态生成控件的场景,例如在布局中根据条件插入多个图片控件[^5]。 --- ### 总结 上述方法均能实现从后台代码设置 `Image` 控件的源图片,具体选择应根据实际需求决定:若需简单快速显示图片,可用绝对路径;若需更好的架构设计,推荐使用绑定方式或封装属性进行动态赋值。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值