编辑
2025-09-30
C#
00

目录

基本语法结构
命名空间声明
属性设置语法
附加属性
标记扩展语法
资源引用
静态资源 StaticResource
动态资源 DynamicResource
数据绑定
控件模板语法
样式定义
控件模板
资源字典语法
资源字典定义
资源字典合并
数据模板语法
基本数据模板
设计时支持语法
设计时数据上下文
调试绑定
注意事项
XAML命名规范
XAML属性设置
XAML资源管理
XAML绑定语法
结论

WPF XAML(Extensible Application Markup Language)是一种用于定义用户界面的标记语言。它允许开发者通过声明性语法来创建和初始化.NET对象。XAML的语法规则包括:使用元素和属性来表示对象和其属性;支持数据绑定,例如基本绑定、相对源绑定、元素绑定和双向绑定;可以通过路径指定绑定的属性;支持事件处理和资源定义,这块想要找到Winform对应就难了,这块与Html相似。

基本语法结构

命名空间声明

XML
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:MyApp">
  • xmlns: WPF核心控件命名空间
  • xmlns:x: XAML基础功能命名空间
  • xmlns:local: 本地应用程序命名空间

这种引用java配置中常用,其实在winform中找不到对应的地方,xmlns:local,可以理解成using 命名空间。

属性设置语法

XML
<!-- 简单属性设置 --> <Button Content="点击我" Width="100" Height="30"/> <!-- 属性元素语法 --> <Button> <Button.Content> <StackPanel> <Image Source="/Images/icon.png"/> <TextBlock Text="按钮文本"/> </StackPanel> </Button.Content> </Button>
  • 使用Button.Content属性元素语法可以容纳复杂的内容结构,这种语法其实就决定了WPF与Winform的机制完全不同了。
  • 可以包含多个控件组合,如图片和文本的组合
  • StackPanel作为容器可以垂直排列图标和文字
  • 这种方式让按钮具有更丰富的视觉效果,比如可以同时显示图标和文字

附加属性

XML
<TextBlock Grid.Row="1" Grid.Column="2" Text="内容"/>
  • Grid.Row 和 Grid.Column 是典型的附加属性
  • 它们不属于TextBlock本身,而是由Grid父容器提供的属性,有点像Winform中TipTools对于控件的附加属性
  • 格式为"父容器类型.属性名",如 Grid.Row
  • 用于指定子元素在Grid中的具体位置

标记扩展语法

资源引用

XML
<!-- 静态资源引用 --> <Button Background="{StaticResource PrimaryBrush}"/> <!-- 动态资源引用 --> <Button Background="{DynamicResource ThemeBrush}"/>

静态资源 StaticResource

  • 一次性加载,在第一次引用时解析并保持固定
  • 资源查找和加载只发生一次,性能较好
  • 适用于不会改变的资源,如固定的颜色、样式
  • 如果资源在运行时改变,不会自动更新
  • 典型应用:品牌色、固定样式、标准字体等

动态资源 DynamicResource

  • 保持实时引用,支持运行时动态更新
  • 每次使用时都会重新查找资源
  • 适用于可能需要动态改变的资源
  • 资源改变时会自动更新UI
  • 典型应用:主题切换、动态样式变化等

数据绑定

XML
<!-- 基本绑定 --> <TextBlock Text="{Binding UserName}"/> <!-- 相对源绑定 --> <TextBlock Text="{Binding RelativeSource={RelativeSource Self}, Path=Name}"/> <!-- 元素绑定 --> <TextBlock Text="{Binding ElementName=sourceElement, Path=Text}"/> <!-- 双向绑定 --> <TextBox Text="{Binding UserInput, UpdateSourceTrigger=PropertyChanged}"/>

控件模板语法

样式定义

XML
<Style x:Key="PrimaryButton" TargetType="Button"> <Setter Property="Background" Value="#007ACC"/> <Setter Property="Foreground" Value="White"/> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="#005999"/> </Trigger> </Style.Triggers> </Style>

控件模板

XML
<ControlTemplate TargetType="Button"> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="5"> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> </Border> </ControlTemplate>

资源字典语法

资源字典定义

XML
<ResourceDictionary> <Color x:Key="PrimaryColor">#007ACC</Color> <SolidColorBrush x:Key="PrimaryBrush" Color="{StaticResource PrimaryColor}"/> </ResourceDictionary>

资源字典合并

XML
<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/Styles/Colors.xaml"/> <ResourceDictionary Source="/Styles/Typography.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources>

数据模板语法

基本数据模板

XML
<ListBox ItemsSource="{Binding Items}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Image Source="{Binding ImageUrl}" Width="50" Height="50"/> <TextBlock Text="{Binding Title}" FontWeight="Bold"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>

设计时支持语法

设计时数据上下文

XML
<UserControl xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DataContext="{d:DesignInstance Type=local:MainViewModel}">

调试绑定

XML
<TextBlock Text="{Binding Path=UserName, diagnostics:PresentationTraceSources.TraceLevel=High}"/>

注意事项

XAML命名规范

在XAML开发中,命名规范直接影响代码的可读性和可维护性。应为控件设置有意义的x

,如"btnLogin"而非"btn1";命名空间要简洁,可用简短别名如"local"替代完整路径;严格遵循Pascal命名规则,即每个单词首字母大写,如"ImageUserProfile"。这些规范能确保代码的专业性和一致性。

XAML属性设置

属性设置需要根据复杂度选择合适的语法形式。简单值如Width="100"使用直接属性语法;复杂内容如渐变背景则使用属性元素语法,以保证结构清晰;附加属性如Grid.Row="0"要在适当场景使用。正确的属性设置方式可以提高代码的可读性和运行效率。

XAML资源管理

资源管理需要合理使用静态资源(固定值)和动态资源(可变值)。将颜色、样式等通用资源统一放入资源字典,便于集中管理和复用。资源键名要有意义,如"PrimaryButtonStyle"而非"Style1"。这样的管理方式可以提高开发效率和资源利用率。

XAML绑定语法

数据绑定要根据场景选择合适的模式:OneWay用于显示,TwoWay用于输入。更新触发器的设置要符合实际需求,如实时更新用PropertyChanged,失去焦点更新用LostFocus。善用相对绑定可以简化数据上下文设置,使代码结构更清晰。

结论

通过遵循这些语法规则和最佳实践,可以编写出更加清晰、易维护的XAML代码。XAML的声明式特性使得UI开发变得更加直观和高效。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!