WPF之RadioButton控件詳解

文章目錄

    • 一、RadioButton簡介
    • 二、RadioButton的基本用法
      • 1. 創建基本的RadioButton
      • 2. 分組管理
      • 3. 設置默認選中
    • 三、RadioButton的重要屬性和事件
      • 1. 關鍵屬性
      • 2. 主要事件
      • 3. 事件處理流程
      • 4. 監聽選中狀態變化
    • 四、數據綁定與RadioButton
      • 1. 基本數據綁定
      • 2. 數據綁定流程
      • 3. 使用枚舉綁定
    • 五、自定義RadioButton樣式
      • 1. 基本樣式設置
      • 2. 自定義模板
      • 3. 創建圖像按鈕
    • 六、常見應用場景及示例
      • 1. 應用場景流程圖
      • 2. 選項卡式界面
      • 3. 問卷調查表單
      • 4. 與其他控件組合使用
    • 七、MVVM模式中的RadioButton
    • 八、性能優化和最佳實踐
      • 1. 性能考慮
      • 2. 可訪問性
      • 3. 常見問題及解決方案
    • 九、總結
    • 十、相關資源

可以根據Github拉取示例程序運行
GitHub程序演示地址(點擊直達)
也可以在本文資源中下載
在這里插入圖片描述

一、RadioButton簡介

RadioButton(單選按鈕)是WPF中常用的UI控件之一,用于在一組選項中選擇唯一的一個選項。與CheckBox不同,同一組內的RadioButton具有互斥性,即同一時間只能有一個按鈕被選中。RadioButton主要應用于需要用戶從預定義的多個選項中選擇一個的場景。

RadioButton控件繼承自ToggleButton類,從而獲得了可切換狀態的特性。但與ToggleButton不同,它實現了組內互斥的行為,確保同一組內只有一個RadioButton可以被選中。

Object
DependencyObject
Visual
UIElement
FrameworkElement
Control
ContentControl
ButtonBase
ToggleButton
RadioButton
IsChecked: bool
GroupName: string
IsThreeState: bool

二、RadioButton的基本用法

1. 創建基本的RadioButton

以下是創建基本RadioButton的XAML代碼:

<RadioButton Content="選項1" Margin="5"/>
<RadioButton Content="選項2" Margin="5"/>
<RadioButton Content="選項3" Margin="5"/>

若要在代碼中創建RadioButton:

// 創建RadioButton控件
RadioButton radioButton = new RadioButton();
radioButton.Content = "選項1";
radioButton.Margin = new Thickness(5);

2. 分組管理

RadioButton的核心特性是通過GroupName屬性進行分組。同一個GroupName的RadioButton只能有一個處于選中狀態:

<StackPanel><!-- 第一組 --><RadioButton GroupName="Group1" Content="選項1" Margin="5"/><RadioButton GroupName="Group1" Content="選項2" Margin="5"/><RadioButton GroupName="Group1" Content="選項3" Margin="5"/><!-- 第二組 --><RadioButton GroupName="Group2" Content="選擇A" Margin="5"/><RadioButton GroupName="Group2" Content="選擇B" Margin="5"/>
</StackPanel>

如果不設置GroupName,RadioButton的分組將基于其邏輯父級元素進行。例如,放在同一個StackPanel中的RadioButton(不指定GroupName)將自動成為一個組。

3. 設置默認選中

通過IsChecked屬性設置RadioButton的默認選中狀態:

<RadioButton GroupName="Group1" Content="選項1" IsChecked="True" Margin="5"/>
<RadioButton GroupName="Group1" Content="選項2" Margin="5"/>
<RadioButton GroupName="Group1" Content="選項3" Margin="5"/>

三、RadioButton的重要屬性和事件

1. 關鍵屬性

RadioButton
GroupName
指定RadioButton所屬的組名
默認值: 空字符串
IsChecked
獲取或設置RadioButton的選中狀態
默認值: false
IsThreeState
指定是否啟用三態模式
默認值: false
Content
設置RadioButton的顯示內容
默認值: null

2. 主要事件

RadioButton
Checked
RadioButton被選中時觸發
Unchecked
RadioButton從選中狀態變為未選中狀態時觸發
Indeterminate
當IsThreeState為true時,
RadioButton進入不確定狀態時觸發
Click
單擊RadioButton時觸發

3. 事件處理流程

User RadioButton OtherRadioButtons Application 點擊 檢查當前狀態 取消選中同組其他按鈕 觸發Checked事件 觸發Unchecked事件 alt [當前未選中] [當前已選中] 始終觸發Click事件 User RadioButton OtherRadioButtons Application

4. 監聽選中狀態變化

public MainWindow()
{InitializeComponent();// 方法1:單獨處理Checked事件myRadioButton.Checked += (sender, e) => {// 處理選中事件MessageBox.Show("RadioButton被選中");};// 方法2:使用Click事件統一處理狀態變化myRadioButton.Click += (sender, e) => {RadioButton rb = sender as RadioButton;if (rb.IsChecked == true){// 處理選中狀態}};
}

四、數據綁定與RadioButton

1. 基本數據綁定

將RadioButton的IsChecked屬性綁定到視圖模型中的布爾屬性:

<RadioButton Content="" IsChecked="{Binding IsMale}"/>
<RadioButton Content="" IsChecked="{Binding IsFemale}"/>
public class PersonViewModel : INotifyPropertyChanged
{private bool _isMale;public bool IsMale{get { return _isMale; }set { _isMale = value;OnPropertyChanged(nameof(IsMale));// 更新互斥屬性if (value) IsFemale = false;}}private bool _isFemale;public bool IsFemale{get { return _isFemale; }set { _isFemale = value; OnPropertyChanged(nameof(IsFemale));// 更新互斥屬性if (value) IsMale = false;}}// INotifyPropertyChanged 實現public event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}
}

2. 數據綁定流程

綁定
用戶交互
觸發事件
更新
影響
ViewModel中的屬性
RadioButton.IsChecked
UI狀態改變
PropertyChanged通知
其他UI元素或邏輯

3. 使用枚舉綁定

更常見和推薦的做法是使用枚舉進行綁定:

// 枚舉定義
public enum Gender
{Male,Female
}// 視圖模型
public class PersonViewModel : INotifyPropertyChanged
{private Gender _gender;public Gender Gender{get { return _gender; }set { _gender = value;OnPropertyChanged(nameof(Gender));}}// INotifyPropertyChanged 實現public event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}
}
<RadioButton Content="" IsChecked="{Binding Gender, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static local:Gender.Male}}"/>
<RadioButton Content="" IsChecked="{Binding Gender, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static local:Gender.Female}}"/>

枚舉到布爾值的轉換器:

public class EnumToBoolConverter : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){// 檢查值和參數if (value == null || parameter == null) return false;// 獲取枚舉值string enumValue = value.ToString();string targetValue = parameter.ToString();// 比較并返回結果return enumValue.Equals(targetValue);}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){// 如果選中,則返回對應的枚舉值if (value is bool && (bool)value){if (parameter != null){return Enum.Parse(targetType, parameter.ToString());}}// 默認返回return Binding.DoNothing;}
}

五、自定義RadioButton樣式

1. 基本樣式設置

<RadioButton Content="自定義樣式" Margin="5"><RadioButton.Style><Style TargetType="RadioButton"><Setter Property="Foreground" Value="Navy"/><Setter Property="FontWeight" Value="Bold"/><Setter Property="Padding" Value="5"/><Style.Triggers><Trigger Property="IsChecked" Value="True"><Setter Property="Foreground" Value="Red"/></Trigger><Trigger Property="IsMouseOver" Value="True"><Setter Property="Foreground" Value="Green"/></Trigger></Style.Triggers></Style></RadioButton.Style>
</RadioButton>

2. 自定義模板

通過修改ControlTemplate可以完全改變RadioButton的外觀:

<RadioButton Content="自定義模板" Margin="10"><RadioButton.Template><ControlTemplate TargetType="RadioButton"><Border x:Name="border" BorderBrush="Gray" BorderThickness="1" CornerRadius="8"Background="LightGray"Padding="5"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="Auto"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><!-- 自定義單選按鈕外觀 --><Grid Width="16" Height="16" Margin="0,0,5,0" VerticalAlignment="Center"><Ellipse x:Name="outerEllipse" Fill="White"Stroke="DarkGray"StrokeThickness="1"/><Ellipse x:Name="innerEllipse" Width="8" Height="8" Fill="Blue" Visibility="Collapsed"/></Grid><!-- 內容 --><ContentPresenter Grid.Column="1" VerticalAlignment="Center"HorizontalAlignment="Left"/></Grid></Border><!-- 視覺狀態管理 --><ControlTemplate.Triggers><Trigger Property="IsChecked" Value="True"><Setter TargetName="innerEllipse" Property="Visibility" Value="Visible"/><Setter TargetName="outerEllipse" Property="Stroke" Value="Blue"/></Trigger><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="border" Property="Background" Value="#FFE8E8E8"/></Trigger><Trigger Property="IsPressed" Value="True"><Setter TargetName="border" Property="Background" Value="#FFDDDDDD"/></Trigger><Trigger Property="IsEnabled" Value="False"><Setter TargetName="border" Property="Opacity" Value="0.5"/><Setter TargetName="outerEllipse" Property="Stroke" Value="#FFAAAAAA"/><Setter TargetName="innerEllipse" Property="Fill" Value="#FFAAAAAA"/></Trigger></ControlTemplate.Triggers></ControlTemplate></RadioButton.Template>
</RadioButton>

3. 創建圖像按鈕

<RadioButton GroupName="ImageButtons" Margin="5"><RadioButton.Template><ControlTemplate TargetType="RadioButton"><Border x:Name="border" BorderThickness="2" BorderBrush="Transparent"CornerRadius="4"><Grid><Image Source="/Assets/icon.png" Width="32" Height="32"/><Border x:Name="selectionIndicator" Background="#3000BFFF" Opacity="0" CornerRadius="4"/></Grid></Border><ControlTemplate.Triggers><Trigger Property="IsChecked" Value="True"><Setter TargetName="border" Property="BorderBrush" Value="#FF00BFFF"/><Setter TargetName="selectionIndicator" Property="Opacity" Value="1"/></Trigger><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="selectionIndicator" Property="Opacity" Value="0.5"/></Trigger></ControlTemplate.Triggers></ControlTemplate></RadioButton.Template>
</RadioButton>

六、常見應用場景及示例

1. 應用場景流程圖

用戶進入界面
是否有預設選項?
設置默認RadioButton選中
所有RadioButton保持未選中
用戶選擇其他選項
觸發選中事件
執行相應業務邏輯
需要切換界面?
加載新界面
更新當前界面狀態

2. 選項卡式界面

<Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><!-- 選項卡欄 --><StackPanel Orientation="Horizontal" Background="#F0F0F0"><RadioButton x:Name="tabHome" Content="首頁" IsChecked="True" Style="{StaticResource TabRadioButtonStyle}"/><RadioButton x:Name="tabSettings" Content="設置" Style="{StaticResource TabRadioButtonStyle}"/><RadioButton x:Name="tabHelp" Content="幫助" Style="{StaticResource TabRadioButtonStyle}"/></StackPanel><!-- 內容區域 --><Grid Grid.Row="1"><ContentControl><ContentControl.Style><Style TargetType="ContentControl"><Style.Triggers><DataTrigger Binding="{Binding IsChecked, ElementName=tabHome}" Value="True"><Setter Property="Content" Value="{StaticResource HomeContent}"/></DataTrigger><DataTrigger Binding="{Binding IsChecked, ElementName=tabSettings}" Value="True"><Setter Property="Content" Value="{StaticResource SettingsContent}"/></DataTrigger><DataTrigger Binding="{Binding IsChecked, ElementName=tabHelp}" Value="True"><Setter Property="Content" Value="{StaticResource HelpContent}"/></DataTrigger></Style.Triggers></Style></ContentControl.Style></ContentControl></Grid>
</Grid>

選項卡按鈕樣式:

<Style x:Key="TabRadioButtonStyle" TargetType="RadioButton"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="RadioButton"><Border x:Name="border" BorderThickness="0,0,0,3" BorderBrush="Transparent"Padding="15,10"><ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/></Border><ControlTemplate.Triggers><Trigger Property="IsChecked" Value="True"><Setter TargetName="border" Property="BorderBrush" Value="#FF0078D7"/><Setter TargetName="border" Property="Background" Value="White"/></Trigger><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="border" Property="Background" Value="#FFEEEEEE"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter>
</Style>

3. 問卷調查表單

<StackPanel><TextBlock Text="您最喜歡哪種編程語言?" FontWeight="Bold" Margin="0,20,0,10"/><RadioButton x:Name="rbCSharp" Content="C#" GroupName="ProgrammingLanguage" Margin="5"/><RadioButton x:Name="rbJava" Content="Java" GroupName="ProgrammingLanguage" Margin="5"/><RadioButton x:Name="rbPython" Content="Python" GroupName="ProgrammingLanguage" Margin="5"/><RadioButton x:Name="rbCpp" Content="C++" GroupName="ProgrammingLanguage" Margin="5"/><RadioButton x:Name="rbOther" Content="其他" GroupName="ProgrammingLanguage" Margin="5"/><!-- 條件顯示文本框 --><TextBox Margin="25,5,5,5" Visibility="{Binding IsChecked, ElementName=rbOther, Converter={StaticResource BooleanToVisibilityConverter}}"Placeholder="請指定其他語言"/>
</StackPanel>

4. 與其他控件組合使用

RadioButton與TextBlock組合:

<RadioButton GroupName="Options" Margin="5"><StackPanel Orientation="Vertical"><TextBlock Text="標準配送" FontWeight="Bold"/><TextBlock Text="3-5個工作日送達" Foreground="Gray" FontSize="11"/></StackPanel>
</RadioButton><RadioButton GroupName="Options" Margin="5"><StackPanel Orientation="Vertical"><TextBlock Text="加急配送" FontWeight="Bold"/><TextBlock Text="1-2個工作日送達(額外收費)" Foreground="Gray" FontSize="11"/></StackPanel>
</RadioButton>

七、MVVM模式中的RadioButton

在MVVM模式中,RadioButton通常綁定到ViewModel中的屬性:

public class SettingsViewModel : INotifyPropertyChanged
{// 定義主題選項枚舉public enum ThemeOption{Light,Dark,System}private ThemeOption _selectedTheme;public ThemeOption SelectedTheme{get { return _selectedTheme; }set { if (_selectedTheme != value){_selectedTheme = value;OnPropertyChanged(nameof(SelectedTheme));// 應用主題變更ApplyThemeChange(value);}}}private void ApplyThemeChange(ThemeOption theme){// 實現主題變更邏輯}// 實現INotifyPropertyChangedpublic event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}
}

XAML中使用命令綁定:

<StackPanel><TextBlock Text="主題設置" FontWeight="Bold" Margin="0,0,0,10"/><RadioButton Content="淺色主題" IsChecked="{Binding SelectedTheme, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static local:SettingsViewModel+ThemeOption.Light}}"Command="{Binding ThemeChangeCommand}"CommandParameter="{x:Static local:SettingsViewModel+ThemeOption.Light}"/><RadioButton Content="深色主題" IsChecked="{Binding SelectedTheme, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static local:SettingsViewModel+ThemeOption.Dark}}"Command="{Binding ThemeChangeCommand}"CommandParameter="{x:Static local:SettingsViewModel+ThemeOption.Dark}"/><RadioButton Content="跟隨系統" IsChecked="{Binding SelectedTheme, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static local:SettingsViewModel+ThemeOption.System}}"Command="{Binding ThemeChangeCommand}"CommandParameter="{x:Static local:SettingsViewModel+ThemeOption.System}"/>
</StackPanel>

八、性能優化和最佳實踐

1. 性能考慮

  • 避免過多的觸發器:在自定義樣式中,盡量減少觸發器的數量和復雜性。
  • 共享資源:將樣式和模板定義為資源,以便在多個RadioButton之間共享。
  • 適當使用虛擬化:在包含大量RadioButton的容器(如ItemsControl)中,啟用虛擬化以提高性能。

2. 可訪問性

為了提高應用程序的可訪問性,確保:

  • 為RadioButton提供有意義的Content內容
  • 使用合適的顏色對比度
  • 考慮鍵盤導航支持

3. 常見問題及解決方案

自定義樣式導致功能丟失
數據綁定不更新UI
RadioButton無法正確分組
確保包含所有必要的視覺狀態和觸發器
自定義ControlTemplate缺少必要的視覺狀態管理
使用VSM管理狀態
模板定義不完整
確保正確實現INotifyPropertyChanged接口
ViewModel未實現INotifyPropertyChanged
檢查轉換器邏輯,添加調試信息
轉換器存在問題
檢查GroupName的拼寫是否一致
GroupName屬性設置不一致
確保RadioButton位于相同的邏輯樹中
RadioButton位于不同的命名空間
問題
可能原因
解決方案

九、總結

RadioButton作為WPF中重要的用戶輸入控件,具有以下特點:

  1. 互斥性:同一組內的RadioButton具有互斥性,用戶只能選擇其中一個。
  2. 靈活性:通過GroupName屬性可以輕松創建多個分組。
  3. 可自定義:通過樣式和模板可以完全改變其外觀。
  4. 數據綁定:可以與MVVM模式無縫配合,支持多種綁定方式。

在實際應用中,RadioButton多用于有限選項的單選場景,如性別選擇、問卷調查、配置設置等。通過合理的設計和樣式定制,可以極大地提升用戶體驗。

十、相關資源

  • 微軟官方文檔:RadioButton Class
  • WPF RadioButton樣式和模板
  • WPF數據綁定詳解

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

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

相關文章

筆試專題(十三)

文章目錄 kotori和氣球題解代碼 走迷宮題解代碼 主持人調度&#xff08;二&#xff09;&#xff08;難題&#xff09;題解代碼 kotori和氣球 題目鏈接 題解 1. 數學-排列組合 2. 每次乘完之后對109取模 代碼 #include<iostream>using namespace std;int main() {int…

圖形圖像基礎知識(1)---- RGB/YUV 顏色格式

目錄 常見RAW顏色格式RGB類型YUV類型YUV類型匯總YUV444類型YUV422類型YUV420類型 參考實例 常見RAW顏色格式 RGB 類型&#xff1a; ARGB1010102&#xff0c;ABGR1010102&#xff0c;BGRA1010102&#xff0c;RGBA1010102 ARGB8888&#xff0c;ABGR8888&#xff0c;BGRA8888&…

CentOS7.9安裝OpenSSL 1.1.1t和OpenSSH9.9p1

一、臨時開啟telnet登錄方式&#xff0c;避免升級失敗無法登錄系統 &#xff08;注意telnet登錄方式存在安全隱患&#xff0c;升級openssh相關服務后要記得關閉&#xff09; 1.安裝telnet服務 yum -y install xinetd telnet* 2.允許root用戶通過telnet登陸&#xff0c;編輯…

使用DCI和RTIT技術進行精準調優--看錄像

使用DCI和RTIT技術進行精準調優_嗶哩嗶哩_bilibili 每次看錄像都記錄一下。 PT/RTIT簡介 DCI技術即通過USB3.0接口去訪問調試目標機的JTAG組件&#xff0c;凡是運行在CPU上的代碼均可以進行調試&#xff0c;這就沒有了使用WinDBG調試時&#xff0c;會出現的不能調試敏感代碼…

從MCP基礎到FastMCP實戰應用

MCP(https://github.com/modelcontextprotocol) MCP&#xff08;模型上下文協議&#xff09; 是一種專為 基于LLM的工具調用外部工具而設計的協議 &#xff0c; 本質上是 LLM ? 工具之間的RPC&#xff08;遠程過程調用&#xff09; 的一種安全且一致的處理方式&#xff0c; 是…

深入理解C語言中的整形提升與算術轉換

深入理解C語言中的整形提升與算術轉換 一.整形提升&#xff1a;概念與原理 在C語言中&#xff0c;整形提升&#xff08;Integer Promotion&#xff09;是一個重要但容易被忽視的概念。它指的是在表達式中&#xff0c;任何小于int類型的整型&#xff08;如char、short&#xf…

編程題python常用技巧-持續

1.字典 1.1排序 在Python中&#xff0c;要按照字典的值進行排序&#xff0c;可以按照以下步驟操作&#xff1a; 方法說明 ?獲取鍵值對列表?&#xff1a;使用 dict.items() 獲取字典的鍵值對視圖。?排序鍵值對?&#xff1a;使用 sorted() 函數&#xff0c;并通過 key 參…

硬件工程師面試常見問題(11)

第五十一問&#xff1a;器件手冊的翻譯題目 要學英語啊&#xff0c;孩子。 第五十二問&#xff1a;二極管三極管常識題 1.二極管的導通電壓一般是 0.7V 2.MOS管根據摻雜類型可以分為 NMOS和PMOS 3.晶體三極管在工作時,發射結和集電結均處于正向偏置,該晶體管工作在一飽和態。…

mysql 配置文件中的[client]、[mysqld]、[mysqldump]和[mysql]區塊的作用區別

1. [client] 區塊 作用&#xff1a; 適用于 所有 MySQL 客戶端工具&#xff08;如 mysql 命令行客戶端、mysqldump、mysqladmin 等&#xff09;。 常見配置項&#xff1a; [client] host 127.0.0.1 # 默認連接的服務器地址 port 3306 # 默認端口 user root …

SARSA 算法詳解:python從零實現

喜歡可以訂閱專欄喲 第一章 強化學習基礎與核心概念 1.1 強化學習的定義與特點 強化學習(Reinforcement Learning, RL)是機器學習三大范式之一(監督學習、無監督學習、強化學習),其核心思想是通過智能體(Agent)與環境(Environment)的持續交互來學習最優策略。與監督…

(C題|社交媒體平臺用戶分析問題)2025年第二十二屆五一數學建模競賽(五一杯/五一賽)解題思路|完整代碼論文集合

我是Tina表姐&#xff0c;畢業于中國人民大學&#xff0c;對數學建模的熱愛讓我在這一領域深耕多年。我的建模思路已經幫助了百余位學習者和參賽者在數學建模的道路上取得了顯著的進步和成就。現在&#xff0c;我將這份寶貴的經驗和知識凝練成一份全面的解題思路與代碼論文集合…

AI重塑SEO關鍵詞策略

內容概要 傳統SEO策略主要依賴人工經驗與基礎工具進行關鍵詞布局&#xff0c;存在效率低、覆蓋維度單一等痛點。而AI技術的介入&#xff0c;使關鍵詞優化從靜態詞庫匹配轉向動態語義網絡構建。通過自然語言處理&#xff08;NLP&#xff09;與深度學習模型&#xff0c;AI不僅能…

【Unity】 組件庫分類詳解

1?? Audio&#xff08;音頻組件&#xff09; 用于處理游戲中的聲音。 Audio Source 讀音[???di?? ?s??s]&#xff0c;音頻源組件&#xff0c;用于播放音頻文件&#xff0c;可設置音量、Pitch、循環播放等屬性&#xff0c;是音頻播放的核心組件。 Audio Listener 讀音…

【區塊鏈】區塊鏈技術介紹

引言 區塊鏈技術自2008年中本聰提出比特幣概念以來&#xff0c;逐漸從加密貨幣的底層技術演變為一場顛覆傳統信任機制的全球性革命。它不僅重塑了金融體系&#xff0c;更在物流、醫療、政務等領域展現出巨大潛力。本文將用通俗易懂的語言&#xff0c;結合實例與原理&#xff0c…

MySQL零基礎入門:Ubuntu環境安裝與操作精解

知識點1【數據庫】 數據的存儲方式&#xff0c;我們之前學的&#xff0c;從變量&#xff0c;數組&#xff0c;鏈表&#xff0c;最后到文件&#xff0c;文件之上&#xff0c;便是數據庫&#xff0c;而我們要介紹的MySQL就是數據庫的關系數據庫中的其中一種。 1、數據庫 本質&…

力扣——23合并升序鏈表

目錄 1:題目描述&#xff1a; 2.算法思想&#xff1a; 3.代碼展示&#xff1a; 1:題目描述&#xff1a; 給你一個鏈表數組&#xff0c;每個鏈表都已經按升序排列。 請你將所有鏈表合并到一個升序鏈表中&#xff0c;返回合并后的鏈表。 示例 1&#xff1a; 輸入&#xff…

AI重構危化品進口清關:一場效率與安全的雙重革命

在全球化工產業鏈深度捆綁的今天&#xff0c;每年超過3億噸危險化學品通過中國各大口岸流入國內市場。這些支撐著新能源電池、半導體材料等戰略產業的“工業血液”&#xff0c;其進口清關流程卻長期困于效率與安全的兩難困境&#xff1a;人工審核單據平均耗時72小時&#xff0c…

牛客網題解 | 棧的壓入、彈出序列

棧的壓入、彈出序列 一、題目鏈接二、題目三、算法原理&#xff1a;用一個棧模擬入棧出棧的過程四、編寫代碼 一、題目鏈接 棧的壓入、彈出序列 二、題目 三、算法原理&#xff1a;用一個棧模擬入棧出棧的過程 思路&#xff1a;用一個棧模擬入棧出棧的過程&#xff0c;模擬出…

使用CubeMX新建DMA工程——存儲器到存儲器模式

目錄 1、新建板級支持包 2、修改main.c 3、程序流程 4、問題 新建工程的基本操作步驟參考這里&#xff1a; 【【野火】STM32 HAL庫開發實戰指南 教學視頻 手把手教學STM32全系列 零基礎入門CubeMXHAL庫&#xff0c;基于野火全系列STM32開發板】 https://www.bilibili.com/…

HTML5 新增的主要標簽整理

一、語義化標簽&#xff08;讓網頁結構更清晰&#xff09; 1. <header> 和 <footer> 定義&#xff1a;表示網頁的「頂部區域」和「底部區域」。場景&#xff1a; <header>&#xff1a;放 Logo、導航欄、搜索框。<footer>&#xff1a;放版權信息、聯系…