WPF關鍵組件代碼示例

通過一個綜合示例代碼,展示WPF的關鍵組件,包括XAML、控件、數據綁定、樣式和模板以及動畫。這個示例創建一個簡單的WPF應用程序,包含一個文本框、按鈕和列表框,實現數據綁定、自定義樣式和模板,以及按鈕點擊后的動畫效果。

示例代碼

1. XAML文件(MainWindow.xaml)

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="400" Width="600"><Window.Resources><!-- 樣式定義 --><Style TargetType="Button"><Setter Property="Background" Value="LightBlue"/><Setter Property="FontSize" Value="16"/><Setter Property="Margin" Value="10"/></Style><!-- 數據模板 --><DataTemplate x:Key="ListBoxItemTemplate"><StackPanel Orientation="Horizontal"><TextBlock Text="{Binding Name}" FontWeight="Bold"/><TextBlock Text=" - " /><TextBlock Text="{Binding Age}" /></StackPanel></DataTemplate></Window.Resources><Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><!-- 文本框 --><TextBox x:Name="txtName" Grid.Row="0" Width="200" Margin="10" PlaceholderText="Enter your name" /><!-- 按鈕 --><Button Grid.Row="1" Content="Add to List" Click="Button_Click"/><!-- 列表框 --><ListBox Grid.Row="2" x:Name="lstPeople" ItemTemplate="{StaticResource ListBoxItemTemplate}" /><!-- 動畫效果 --><Button Grid.Row="3" Content="Animate" Click="AnimateButton_Click" HorizontalAlignment="Center"/></Grid>
</Window>

2. 后臺代碼(MainWindow.xaml.cs)

using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Media.Animation;namespace WpfApp
{public partial class MainWindow : Window{public ObservableCollection<Person> People { get; set; }public MainWindow(){InitializeComponent();People = new ObservableCollection<Person>();lstPeople.ItemsSource = People;}private void Button_Click(object sender, RoutedEventArgs e){if (!string.IsNullOrWhiteSpace(txtName.Text)){People.Add(new Person { Name = txtName.Text, Age = 30 });txtName.Clear();}}private void AnimateButton_Click(object sender, RoutedEventArgs e){DoubleAnimation animation = new DoubleAnimation{From = 1.0,To = 0.0,Duration = new Duration(TimeSpan.FromSeconds(1)),AutoReverse = true};((Button)sender).BeginAnimation(OpacityProperty, animation);}}public class Person{public string Name { get; set; }public int Age { get; set; }}
}

關鍵組件詳解

a. XAML

XAML文件定義了整個用戶界面的布局和結構。通過XAML,可以直觀地看到界面的組織方式和控件的排列。

b. 控件(Controls)

示例中使用了TextBoxButtonListBox控件。TextBox用于用戶輸入,Button用于觸發事件,ListBox用于顯示數據列表。

c. 數據綁定(Data Binding)

在后臺代碼中,使用ObservableCollection<Person>作為數據源,并綁定到ListBox控件的ItemsSource屬性。通過這種方式,數據變化會自動反映在界面上。

People = new ObservableCollection<Person>();
lstPeople.ItemsSource = People;

d. 樣式和模板(Styles and Templates)

在XAML文件的資源中定義了樣式和數據模板。樣式定義了按鈕的外觀,數據模板定義了列表框項的顯示方式。

<Style TargetType="Button"><Setter Property="Background" Value="LightBlue"/><Setter Property="FontSize" Value="16"/><Setter Property="Margin" Value="10"/>
</Style><DataTemplate x:Key="ListBoxItemTemplate"><StackPanel Orientation="Horizontal"><TextBlock Text="{Binding Name}" FontWeight="Bold"/><TextBlock Text=" - " /><TextBlock Text="{Binding Age}" /></StackPanel>
</DataTemplate>

e. 動畫(Animations)

在按鈕點擊事件處理程序中,定義了一個簡單的雙精度動畫(DoubleAnimation),用于改變按鈕的不透明度,實現淡入淡出的效果。

private void AnimateButton_Click(object sender, RoutedEventArgs e)
{DoubleAnimation animation = new DoubleAnimation{From = 1.0,To = 0.0,Duration = new Duration(TimeSpan.FromSeconds(1)),AutoReverse = true};((Button)sender).BeginAnimation(OpacityProperty, animation);
}

結論

通過這個綜合示例,我們展示了WPF中的關鍵組件及其使用方法。XAML用于定義界面結構,控件用于構建用戶界面,數據綁定簡化了數據和界面的交互,樣式和模板提高了界面的可定制性,動畫則增強了用戶體驗。掌握這些組件和技術,能夠幫助開發人員創建功能強大且用戶友好的WPF應用程序。

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

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

相關文章

深入解析R語言的貝葉斯網絡模型:構建、優化與預測;INLA下的貝葉斯回歸;現代貝葉斯統計學方法;R語言混合效應(多水平/層次/嵌套)

目錄 ①基于R語言的貝葉斯網絡模型的實踐應用 ②R語言貝葉斯方法在生態環境領域中的應用 ③基于R語言貝葉斯進階:INLA下的貝葉斯回歸、生存分析、隨機游走、廣義可加模型、極端數據的貝葉斯分析 ④基于R語言的現代貝葉斯統計學方法&#xff08;貝葉斯參數估計、貝葉斯回歸、…

react使用AntV

AntV使用&#xff08;https://antv.antgroup.com/&#xff09; import React, { useEffect } from "react"; // npm install antv/g2 import { Chart } from "antv/g2"; const Charts () > { function Ccc() { // 準備數據 const data [ { genre: …

【Linux】腳本shell script

shell是與Linux交互的基本工具 shell script是針對shell所寫的腳本&#xff0c;解釋執行&#xff0c;無需編譯 注意事項 指令的執行是從上而下、從左而右的分析與執行&#xff1b; 指令、選項與參數間的多個空白都會被忽略掉&#xff1b; 空白行也將被忽略掉&#xff0c;并且…

抽象工廠模式(AbstractFactoryPattern)

文章目錄 1.抽象工廠模式定義2.UML類圖3.抽象工廠模式具體實現工廠模式實現單一產品族抽象工廠實現多產品族產品類工廠類使用 4.抽象工廠模式優缺點 1.抽象工廠模式定義 提供一個創建一系列相關或相互依賴對象的接口&#xff0c;而無需指定它們具體的類。 工廠方法模式是單一產…

2024電工杯B題食譜評價與優化模型思路代碼論文分析

2024年電工杯數學建模競賽B題論文和代碼已完成&#xff0c;代碼為B題全部問題的代碼&#xff0c;論文包括摘要、問題重述、問題分析、模型假設、符號說明、模型的建立和求解&#xff08;問題1模型的建立和求解、問題2模型的建立和求解、問題3模型的建立和求解&#xff09;、模型…

正點原子[第二期]Linux之ARM(MX6U)裸機篇學習筆記-17講 定時器按鍵消抖

前言&#xff1a; 本文是根據嗶哩嗶哩網站上“正點原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸機篇”視頻的學習筆記&#xff0c;在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。…

計算機網絡安全控制技術

1.防火墻技術 防火墻技術是近年來維護網絡安全最重要的手段&#xff0c;但是防火墻不是萬能的&#xff0c;需要配合其他安全措施來協同 2.加密技術 目前加密技術主要有兩大類&#xff1a;對稱加密和非對稱加密 3.用戶識別技術 核心是識別網絡者是否是屬于系統的合法用戶 …

【設計模式深度剖析】【1】【結構型】【代理模式】| 玩游戲打怪、升級為例加深理解

&#x1f448;?上一篇:創建型設計模式對比 | 下一篇:裝飾器模式&#x1f449;? 目 錄 代理模式定義英文原話直譯如何理解&#xff1f; 3個角色UML類圖1. 抽象主題&#xff08;Subject&#xff09;角色2. 代理類&#xff1a;代理主題&#xff08;Proxy Subject&#xff0…

UE5 OnlineSubsystem Steam創建會話失敗解決方法

連接上Steam但是創建會話失敗 解決方法 在DefaultEngine.ini中加上bInitServerOnClienttrue,這個其實在官方文檔里用注釋給出了&#xff0c;直接取消注釋就行 刪除項目目錄中的Saved、Internmediate、Binaries目錄 右鍵你的項目.uproject選擇Generate Visual Studio project f…

ASP.Net MVC在控制臺添加視圖時沒有模型類并且不能添加視圖

情況如下&#xff1a; 解決方法&#xff1a; 1.查看vs能否創建asp.net mvc項目&#xff0c;這種情況一般是更換了vs打開老項目 2.點擊跳轉至修改安裝選項界面 3.選擇安裝項即可 如果以上都有&#xff1a; 看看你的視圖文件是否存在在項目中 也不能點擊添加&#xff0c;如果…

探索數值分析的奧秘:掌握NumPy與Pandas基礎

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、NumPy&#xff1a;數值計算的效率提升器 二、Pandas&#xff1a;數據處理與分析的利器 …

Linux文本三劍客之sed

set的定義&#xff1a; sed是一種流編輯器&#xff0c;流編輯器會在編輯器處理數據之前基于預先提供的一組規則來編輯數據流。 sed編輯器可以根據命令來處理數據流中的數據&#xff0c;這些命令要么從命令行中輸入&#xff0c;要么存儲在一個命令文本文件中。 sed的執行過程&a…

Nextjs 動態路由獲取參數

目錄 一、創建page目錄下的路由文件 二、通過useRouter來獲取動態參數 先看官方文檔&#xff1a;Routing: Dynamic Routes | Next.js 使用Nextjs13版本參考官方文檔后實現仍有問題&#xff0c;網上的材料大多和官網一致&#xff0c;經過測試后&#xff0c;我找到了這個解決方…

【日記】今天好困(407 字)

正文 4T 硬盤降價了&#xff0c;好心動。雖然只降了 10 塊錢……. 為什么硬盤這么貴啊&#xff01;哼。 柜面上雜事好多。雖然一天到晚見不到幾個客戶&#xff0c;但雜事就是很多。一個頭兩個大。也不知道從哪兒冒出來的這么多事。 芒果干到了&#xff01;還沒去取&#xff0c;…

sql把一個表的某幾列的數據存到另一個表里

一.如何用slq語句把一個表中的某幾個字段的數據插入到另一個新表中&#xff0c;就要用下面這條slq語句&#xff1a; insert into 表名1(字段1,字段2) select 字段1,字段2 from 表名2 這里有一點值得注意的是這2個字段要一一對應&#xff0c;并且按順序。 二.如果另一個表是…

JAVASE之類和對象(1)

路雖遠&#xff0c;行則將至&#xff1b;事雖難&#xff0c;做則必成。 主頁&#xff1a;趨早——Step 專欄&#xff1a;JAVASE gitte&#xff1a;https://gitee.com/good-thg 引言&#xff1a; 這篇文章我們只介紹前半部分&#xff0c;下一篇文章會介紹剩下的部分。 目錄 一、…

LeetCode 面試150

最近準備面試&#xff0c;我以前不愿意面對的 現在保持一顆本心&#xff0c;就是專注于算法思想&#xff0c;語言基礎的磨煉&#xff1b; 不為速成&#xff0c;不急功近利的想要比賽&#xff0c;或者為了面試。 單純的本心&#xff0c;體驗算法帶來的快樂&#xff0c;是一件非常…

Python操作MySQL數據庫的工具--sqlalchemy

文章目錄 一、pymysql和sqlalchemy的區別二、sqlalchemy的詳細使用1.安裝庫2.核心思想3.整體思路4.sqlalchemy需要連接數據庫5.使用步驟1.手動提前創建數據庫2.使用代碼創建數據表3.用代碼操作數據表3.1 增加數據3.2 查詢數據3.3 刪除數據3.4 修改數據 一、pymysql和sqlalchemy…

2025秋招深度學習基礎面試題(一)

01. 卷積和BN如何融合提升推理速度 Conv和BN的融合:在網絡的推理階段,可以將BN層的運算融合到Conv層中,減少運算量,加速推理。本質上是修改了卷積核的參數,在不增加Conv層計算量的同時,略去了BN層的計算量。def fuse_conv_bn(conv, bn):std = (bn.running_var + bn.eps).…

數據倉庫、數據中臺、大數據平臺之間的關系

數據行業經常會出現數據倉庫、數據中臺、大數據平臺等概念&#xff0c;容易產生疑問&#xff0c;它們中間是相等&#xff0c;還是包含的關系&#xff1f; 數據中臺和數據倉庫概念的關系 數據中臺概念是包含數據倉庫的&#xff0c;數據倉庫是數據中臺中的一部分&#xff0c;包含…