C#?WPF后臺(tái)動(dòng)態(tài)添加控件實(shí)戰(zhàn)教程
概述
在Winform中從后臺(tái)添加控件相對(duì)比較容易,但是在WPF中,我們知道界面是通過XAML編寫的,如何把后臺(tái)寫好的控件動(dòng)態(tài)添加到前臺(tái)呢?本節(jié)舉例介紹這個(gè)問題。
這里要用到UniformGrid布局,UniformGrid 是一種橫向的網(wǎng)格分割、縱向的網(wǎng)格分割分別是均等的分割的布局類型.
?項(xiàng)目介紹
-. 這里界面添加一個(gè)ComboBox用來下拉選擇圖片數(shù)量;
-. 添加一個(gè)button用來執(zhí)行圖片顯示;
dispaly下方是圖片顯示區(qū)域

代碼設(shè)計(jì)
-.前臺(tái)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>前臺(tái)代碼比較簡(jiǎn)單,只要關(guān)注下UniformGrid控件,綁定了Loaded事件。
-.后臺(tái)代碼:
[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($"當(dāng)前選擇的圖片名稱:{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:從路徑下加載圖片并轉(zhuǎn)換為BitmapImage;
②UniformGrid_Loaded;獲取UniformGrid對(duì)象;
③ImageFullPath:從項(xiàng)目bin下獲取圖片文件并讀取到這個(gè)數(shù)組;
④btnAdd_Click:界面button點(diǎn)擊事件,這里是核心的代碼,主要就是申城圖片,然后設(shè)定好 UniformGrid的行列以及其他屬性后添加到控件里面, UniformGrid.Children.Add(image);
⑤ImageClick:點(diǎn)擊后顯示圖片的名稱.

源碼
總結(jié)
到此這篇關(guān)于C# WPF后臺(tái)動(dòng)態(tài)添加控件的文章就介紹到這了,更多相關(guān)C# WPF后臺(tái)動(dòng)態(tài)加控件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#使用Shader實(shí)現(xiàn)夜幕降臨倒計(jì)時(shí)的效果
這篇文章主要介紹了C#使用Shader實(shí)現(xiàn)夜幕降臨倒計(jì)時(shí)的效果,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10
C#使用Automation實(shí)現(xiàn)控制自動(dòng)撥打接聽電話
這篇文章主要為大家詳細(xì)介紹了C#如何使用Automation實(shí)現(xiàn)控制自動(dòng)撥打接聽電話,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
C#?Windows?Forms中實(shí)現(xiàn)控件之間的連接線的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何在C#?Windows?Forms應(yīng)用程序中實(shí)現(xiàn)繪圖工具中多個(gè)控件之間的連接線功能,文中的示例代碼講解詳細(xì),需要的可以參考下2024-02-02
基于C#編寫經(jīng)理評(píng)分系統(tǒng)
最近接了這樣一個(gè)項(xiàng)目,要求使用c#編寫經(jīng)理評(píng)分系統(tǒng),需求,要顯示員工信息,實(shí)現(xiàn)項(xiàng)目經(jīng)理給員工評(píng)分功能,今天小編分步驟給大家介紹,需要的的朋友參考下2017-03-03
C# 靜態(tài)變量與靜態(tài)方法實(shí)例研究
寫了一個(gè)翻譯英漢單詞辭典的小程序,發(fā)現(xiàn)在調(diào)用幾千次的時(shí)候速度很慢2011-11-11
winform 使用Anchor屬性進(jìn)行界面布局的方法詳解
這篇文章主要介紹了winform 使用Anchor屬性進(jìn)行界面布局的方法,有需要的朋友可以參考一下2013-12-12
C#實(shí)現(xiàn)文件讀寫到SQLite數(shù)據(jù)庫(kù)
這篇文章主要為大家詳細(xì)介紹了使用?C#?將文件讀寫到?SQLite?數(shù)據(jù)庫(kù)的幾種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2025-01-01

