C# WPF后臺動態添加控件(經典)

概述

? ? ??在Winform中從后臺添加控件相對比較容易,但是在WPF中,我們知道界面是通過XAML編寫的,如何把后臺寫好的控件動態添加到前臺呢?本節舉例介紹這個問題。

? ? ?? 這里要用到UniformGrid布局,UniformGrid 是一種橫向的網格分割、縱向的網格分割分別是均等的分割的布局類型.

項目介紹

? ? ??-. 這里界面添加一個ComboBox用來下拉選擇圖片數量;

? ? ? -. 添加一個button用來執行圖片顯示;

dispaly下方是圖片顯示區域

609b00738ccc24ef85f0d087cbf03189.png

代碼設計

-.前臺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:點擊后顯示圖片的名稱.

運行演示

9a828723c1c16b2d79154d5811ebfcdd.gif

源碼

百度網盤鏈接:https://pan.baidu.com/s/1iu2MovTGDoUd_HsTnI7mAA

提取碼:6666

技術群:添加小編微信并備注進群

小編微信:mm1552923 ??

公眾號:dotNet編程大全? ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287590.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287590.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287590.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android Button監聽的方式

Android Button的幾種監聽方式 1、一個Button對應一個監聽 1&#xff09;xml文件中綁定監聽 <Buttonandroid:id"id/btn_test"android:layout_width"match_parent"android:layout_height"wrap_content"android:text"test listener"a…

hdu 5441 (并查集)

題意&#xff1a;給你n個點&#xff0c;m條邊構成無向圖。q個詢問&#xff0c;每次一個值&#xff0c;求有多少條路&#xff0c;路中的邊權都小于這個值 a->b 和 b->a算兩種 思路&#xff1a;把權值從小到大排序&#xff0c;詢問從小到大排序&#xff0c;如果相連則用并查…

【Envi風暴】Envi 5.4遙感影像鑲嵌原來如此簡單!

圖像鑲嵌指是在一定的數學基礎控制下,把多景相鄰的遙感圖像拼接成一個大范圍、無縫圖像的過程。 Envi的圖像鑲嵌功能提供交互式的方式將沒有地理坐標或者地理坐標的多幅圖像合并,生成一幅單一的合成圖像。鑲嵌功能提供了透明處理、勻色、羽化等功能。 下面演示基于地理坐標(…

[python opencv 計算機視覺零基礎到實戰] 三、numpy與圖像編輯

一、學習目標 了解圖片的通道與數組結構了解使用numpy創建一個圖片了解使用numpy對圖片的一般操作方法 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的hel…

java 常用類庫_JAVA(三)JAVA常用類庫/JAVA IO

成鵬致遠 |lcw.cnblog.com|2014-02-01JAVA常用類庫1.StringBufferStringBuffer是使用緩沖區的&#xff0c;本身也是操作字符串的&#xff0c;但是與String類不同&#xff0c;String類的內容一旦聲明之后則不可改變&#xff0c;改變的只是其內存地址的指向&#xff0c;而StringB…

Error: package or namespace load failed for ‘rJava’:

https://stackoverflow.com/questions/30738974/rjava-load-error-in-rstudio-r-after-upgrading-to-osx-yosemite 安裝好的“xlsx”不能正常加載 library("xlsx") 報錯&#xff1a; 載入需要的程輯包&#xff1a;rJava Error: package or namespace load failed for…

Android之國際化部分文字生效而部分文字沒有生效的坑

1 問題 Android國際化我們知道只要在res目錄下面&#xff0c;創建不同國家的文件夾然后&#xff0c;把不同國家對于的語言以鍵值對的方式寫進strings.xml文件就行&#xff0c;這是一個非常簡單的操作&#xff0c;但是今天遇到了一個很奇葩的問題&#xff0c;在部分手機&#x…

【中間件】c#/.net使用GZY.Quartz.MUI搭建可視化的定時任務面板

GZY.Quartz.MUI是在github上開源的aspnetcore項目, 它旨在幫助開發人員通過面板來設置定時任務&#xff0c;主要想做的就是:像swaggerUI一樣,項目入侵量小,僅需要在Startup中注入的UI組件官方地址:https://www.cnblogs.com/GuZhenYin/p/15745002.html主要功能1.增加本地json持久…

Python學習筆記之字典

一、創建和使用字典 1、創建字典 phonebook{Alice:2341,Beth:9102,Cecil:3258} 2、dict,通過映射創建字典 >>> items[(name,Gumby),(age,34)] >>> ddict(items) >>> d 顯示&#xff1a;{name:Gumby,age:34} dict&#xff0c;通過關鍵字創建字典 >…

iOS UI基礎-7.0 UIScrollView

概述 移動設備的屏幕大小是極其有限的&#xff0c;因此直接展示在用戶眼前的內容也相當有限.當展示的內容較多&#xff0c;超出一個屏幕時&#xff0c;用戶可通過滾動手勢來查看屏幕以外的內容,普通的UIView不具備滾動功能&#xff0c;不能顯示過多的內容。UIScrollView是一個能…

【ArcGIS風暴】緩沖區分析、疊置分析綜合實驗案例:購房區域的選擇

實驗平臺:ArcGIS 9.3實驗目的:熟練掌握A rcGIS緩沖區分析和疊置分析操作,綜合利用各項空間分析工具解決實際問題。實驗要求:對每個條件進行緩沖區分析,運用空間疊置分析對多個圖層疊加,并分等級,確定合適的區域。實驗數據:ArcEx8實驗步驟打開ArcMap,加載數據ArcEx8,如…

[python opencv 計算機視覺零基礎到實戰] 四、了解色彩空間及其詳解

一、學習目標 了解什么是色彩空間了解opencv中色彩空間的轉換 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld [[python opencv 計算機視覺零基…

java gui 按鍵 數組_java GUI分配數組值

好的,所以這是一個非常基本的例子.它需要更多的工作和優化,但應該讓你朝著正確的方向前進import java.awt.Color;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Point;import java.awt.Shape;im…

Android之如何實現阿拉伯版本(RTL)的recycleView的網格布局

1 問題 比如正常的recycleView的網格布局效果如下 1 2 34 5 67 8 現在需要變成這樣的效果 3 2 16 5 48 7 2 思考過程和嘗試解決方法 1)從recycleView上直接分析,看有沒有相關的方法變成這個格式,網上百度了,基本上找不到 2)既然recycleView里面有常見的幾種布局設置,…

poj1189 簡單dp

http://poj.org/problem?id1189 Description 有一個三角形木板,豎直立放。上面釘著n(n1)/2顆釘子&#xff0c;還有(n1)個格子&#xff08;當n5時如圖1&#xff09;。每顆釘子和周圍的釘子的距離都等于d&#xff0c;每一個格子的寬度也都等于d&#xff0c;且除了最左端和最右端…

WPF|如何在 WPF 中設計漂亮的社交媒體信息儀表板

1. 效果展示先來直接欣賞效果&#xff1a;2. 準備創建一個WPF工程&#xff0c;比如站長使用 .NET 7[1] 創建名為 Dashboard3 的WPF項目&#xff0c;添加一些圖片資源&#xff0c;項目目錄如下&#xff1a;2.1 圖片資源可在網站 iconfont[2] 下載 關閉、最小化 圖標&#xff0c;…

CentOS 設置服務開機啟動的方法

為什么80%的碼農都做不了架構師&#xff1f;>>> CentOS設置服務開機啟動的兩種方法 1、利用 chkconfig 來配置啟動級別 在CentOS或者RedHat其他系統下&#xff0c;如果是后面安裝的服務&#xff0c;如httpd、mysqld、postfix等&#xff0c;安裝后系統默認不會自動啟…

【ArcGIS風暴】水文分析模塊實驗:山脊線和山谷線提取

實驗平臺:ArcGIS 9.3實驗目的:學習和掌握山脊線和山谷線提取的原理及方法實驗要求:利用ArcGIS水文分析模塊提取樣區的山脊線和山谷線實驗數據:Ex1實驗步驟:1.正負地形的提取 (1)打開Arcmap,加載數據EX1,如圖 (2)平滑處理(均值濾波)。加載Spatial Analyst模塊,單擊…

[python opencv 計算機視覺零基礎到實戰] 五、對象追蹤

一、學習目標 了解為什么色彩空間的轉換那么重要了解opencv中進行對象跟蹤的方法 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld [[python op…

Android之用glide加載gif圖片靜態展示

1 問題 圖片是gif動圖&#xff0c;我們需要獲取第一幀的靜態圖片并且展示。 2 解決辦法 public void changeGifToPicture(NonNull Context context, NonNull String url, NonNull ImageView imageView) {Glide.with(context).asBitmap().load(url).into(new BitmapImageViewTa…