C# WPF后台动态添加控件实战教程

作者:zls366

最近尝试用wpf在后台动态添加控件,所以下面这篇文章主要给大家介绍了关于C# WPF后台动态添加控件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

在Winform中从后台添加控件相对比较容易,但是在WPF中,我们知道界面是通过XAML编写的,如何把后台写好的控件动态添加到前台呢?本节举例介绍这个问题。

这里要用到UniformGrid布局,UniformGrid 是一种横向的网格分割、纵向的网格分割分别是均等的分割的布局类型.

​项目介绍

-. 这里界面添加一个ComboBox用来下拉选择图片数量;

-. 添加一个button用来执行图片显示;

dispaly下方是图片显示区域

-.前台XAML代码:

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

点击这里下载

到此这篇关于C# WPF后台动态添加控件的文章就介绍到这了,更多相关C# WPF后台动态加控件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • C#并行编程之Task同步机制
    C#并行编程之Task同步机制
    2022-05-05
  • Unity2021发布WebGL与网页交互问题的解决
    Unity2021发布WebGL与网页交互问题的解决
    2022-05-05
  • C#列表List<T>、HashSet和只读集合介绍
    C#列表List<T>、HashSet和只读集合介绍
    2022-05-05
  • C#高效比较两个DataTable数据差异化的方法实现
    C#高效比较两个DataTable数据差异化的方法实现
    2022-05-05
  • C# WPF后台动态添加控件实战教程
    C# WPF后台动态添加控件实战教程
    2022-05-05
  • 关于C# dynamic装箱问题
    关于C# dynamic装箱问题
    2022-05-05
  • C#类的成员之Field字段的使用
    C#类的成员之Field字段的使用
    2022-05-05
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号