编辑
2025-09-30
C#
00

什么是标记扩展?

标记扩展是XAML中一种特殊的语法机制,允许在属性赋值时动态计算或引用值,而不仅仅是使用简单的文本字符串。它们提供了一种在XAML中灵活处理值的方式,可以实现复杂的赋值逻辑。

常见的标记扩展

StaticResource 标记扩展

StaticResource用于引用已经定义的资源,通常在资源字典中。

text
<Window.Resources> <SolidColorBrush x:Key="PrimaryBrush" Color="Blue"/> </Window.Resources> <Grid Background="{StaticResource PrimaryBrush}"> <!-- 使用静态资源 --> </Grid>

image.png

DynamicResource 标记扩展

StaticResource类似,但会在运行时动态更新资源。

text
<Window.Resources> <SolidColorBrush x:Key="ThemeBrush" Color="Green"/> </Window.Resources> <Button Background="{DynamicResource ThemeBrush}"> 动态资源按钮 </Button>
编辑
2025-09-30
C#
00

什么是XAML命名空间

XAML命名空间是用于在XAML文件中定义和区分不同类型和功能的标识符。它们类似于XML命名空间,帮助解析器识别和解析XAML文档中的元素和属性。命名空间在XAML中是必需的,因为它们确保了元素和属性的唯一性,避免了命名冲突。

常见的XAML命名空间

默认命名空间

XML
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  • 这是WPF核心控件的默认命名空间。
  • 包含所有WPF控件和布局元素,如ButtonGridStackPanel等。
  • 这种命名空间对于Winform开发来说会比较不习惯了,但在Java中一直有类似的。
编辑
2025-09-30
C#
00

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"。这些规范能确保代码的专业性和一致性。

编辑
2025-09-30
C#
00

XAML是一种基于XML的声明式标记语言,作为WPF、UWP和Xamarin.Forms等.NET框架中用户界面开发的核心技术。它提供了丰富的控件系统,包括文本控件、按钮控件、列表控件等,并支持多种布局方式如StackPanel、Grid、DockPanel等。XAML具有强大的样式和模板系统,支持资源管理,并提供了灵活的数据绑定机制。

XAML 基础概念

什么是XAML

XAML (eXtensible Application Markup Language) 是一种基于XML的标记语言,主要用于描述用户界面。它是WPF、UWP、Xamarin.Forms等.NET框架中声明式UI的基础。

XAML的主要特点

  • 声明式语法
  • 与.NET紧密集成
  • 支持数据绑定
  • 资源系统
  • 样式和模板
  • 可扩展性

XAML 基本语法

命名空间声明

XML
<Window x:Class="App02.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:App02" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800">

常用命名空间说明:

  • xmlns: WPF核心控件命名空间
  • xmlns:x: XAML语言基本功能命名空间
  • xmlns:local: 应用程序本地命名空间
  • xmlns:d: 设计时属性命名空间
  • xmlns:mc: 标记兼容性命名空间
编辑
2025-09-30
C#
00

Windows Presentation Foundation (WPF) 是一个用于构建 Windows 应用程序的强大框架。它支持丰富的用户界面和数据绑定,采用了 MVVM(Model-View-ViewModel)设计模式,使得应用程序的结构更加清晰和易于维护。本文将详细解析一个标准 WPF 项目的基础结构,并提供完整的示例代码。

项目结构

一个典型的 WPF 项目结构如下所示:

C#
MyWpfApp/ ├── Properties/ │ └── AssemblyInfo.cs # 程序集信息 ├── References/ # 项目引用 ├── App.xaml # 应用程序入口和全局资源 ├── App.xaml.cs # 应用程序代码隐藏 ├── MainWindow.xaml # 主窗口XAML └── MainWindow.xaml.cs # 主窗口代码隐藏 ├── Assets/ # 资源文件 │ ├── Images/ # 图片资源 │ ├── Icons/ # 图标资源 │ └── Styles/ # 样式资源 ├── Models/ # 数据模型 ├── ViewModels/ # 视图模型 ├── Views/ # 视图 ├── Services/ # 服务层 ├── Helpers/ # 辅助类 ├── Controls/ # 自定义控件 └── Converters/ # 值转换器