首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 筆記:資源與樣式系統 (Style/Setter/StaticResource)

     編輯:關於.NET

WPF **資源系統** 是樣式、模板、筆刷等可重用物件的倉庫。**樣式** 透過 Setter 批量設定屬性值,實現「一次定義,處處套用」。

樣式定義與應用

<Window>
  <Window.Resources>
    <Style x:Key="myStyle" TargetType="{x:Type TextBlock}">
      <Setter Property="VerticalAlignment" Value="Center" />
      <Setter Property="FontWeight" Value="Bold" />
      <Setter Property="FontStyle" Value="Italic" />
    </Style>
  </Window.Resources>

  <DockPanel>
    <StackPanel>
      <TextBlock Style="{StaticResource myStyle}">Name:</TextBlock>
      <TextBox Text="{Binding Path=Name}" />
      <TextBlock Style="{StaticResource myStyle}">Nick:</TextBlock>
      <TextBox Text="{Binding Path=Nick}" />
    </StackPanel>
  </DockPanel>
</Window>

核心機制解析

隱式樣式 (無 x:Key)

<Style TargetType="{x:Type TextBox}">
  <Setter Property="Padding" Value="3" />
  <Setter Property="BorderBrush" Value="Gray" />
</Style>
<!-- 範圍內所有 TextBox 自動套用,無需 Style 屬性 -->

**優先級**:隱式樣式 < 顯式樣式 < 屬性直接設定 (本地值)。

資源查找範圍

  1. 元素自身 Resources
  2. 父元素鏈向上 (Window → App → System)
  3. 主題字典 (Themes/Generic.xaml)

StaticResource 找不到拋出 XAML 解析異常;DynamicResource 執行時查找,支援運行時切換主題。

最佳實踐

  1. 分層管理:App.xaml 放全域樣式/筆刷;Window/UserControl.Resources 放局部樣式;ResourceDictionary 檔案模組化 (MergedDictionaries)。
  2. 命名規範:Key="ControlType_State_Property" 如 Button_Hover_Background。
  3. BasedOn 繼承:<Style x:Key="BoldText" TargetType="TextBlock" BasedOn="{StaticResource BaseText}"> 避免重複定義。
  4. 避免濫用 DynamicResource:除非需運行時切換,否則 StaticResource 效能更好。

樣式系統是 WPF 「關注點分離」的基石 — 將外觀從結構中剝離,讓設計師與開發者並行工作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
元素作用關鍵點
x:Key="myStyle"資源字典鍵值**有 Key → 顯式引用** Style="{StaticResource myStyle}"
TargetType="{x:Type TextBlock}"目標類型Setter 的 Property 自動解析為該類型屬性;**無 Key 時 → 隱式樣式**,自動套用於範圍內所有匹配類型元素
Setter Property="..." Value="..."屬性注入每個 Setter 對應一個屬性值;支援資源引用 Value="{StaticResource brushKey}"
StaticResource靜態資源查找編譯/載入時一次性查找,**資源必須在前方定義**;效能優於 DynamicResource