当前位置: 首页 > news >正文

XAML:知识记录

1、x:Class:指示xaml编译器,将xaml编译的结果 和 当前哪个C#类合并在一起。

<Windowx:Class="WpfApplication1.MainWindow"</Window>

2、用户界面的树形结构、XAML中为对象属性赋值的3种方法

知识点核心要点示例
树形结构WPF以根元素(如Window)起始,向下嵌套布局容器与控件,构成逻辑树与可视树,是路由事件与属性继承的底层基础。<Window>
<Grid>
<StackPanel>
<TextBlock Text="姓名"/>
<TextBox Width="150"/>
<Button Content="提交"/>
</StackPanel>
</Grid>
</Window>
Attribute = Value直接在标签中写属性名="字符串值",XAML编译器通过内置类型转换器(TypeConverter)将字符串转为目标类型。<Button Content="点击" Background="Blue" Width="100" Height="40"/>

<Rectangle Fill="Red" Width="200" Height="50"/>
属性标签当属性值无法用字符串表达(需嵌套对象)时,使用<对象.属性名>作为子标签,在其中定义复杂内容。<Button>
<Button.Content>
<StackPanel Orientation="Horizontal">
<Image Source="icon.png" Width="20"/>
<TextBlock Text="下载文件"/>
</StackPanel>
</Button.Content>
</Button>
标签扩展使用{}花括号包裹的特殊语法,用于数据绑定(Binding)、静态/动态资源引用(StaticResource/DynamicResource)等高级场景。<!-- 数据绑定 -->
<TextBox Text="{Binding ElementName=slider1, Path=Value}"/>

<!-- 静态资源引用 -->
<TextBlock Text="{StaticResource myString}"/>

3、

知识点核心要点示例
事件处理器与代码后置

WPF支持在XAML中为对象的事件指定事件处理器。方法:是用事件处理器的函数名为对象的事件Attribute赋值。

将逻辑代码与UI代码分离、隐藏在UI代码后面的形式称为代码后置(Code-Behind)-。.

NET的partial类机制使得XAML解析生成的代码能与x:Class指定的类合并。

VS中可在XAML里右键点击事件名称,选择“Navigate to Event Handler”快速跳转到后置代码。

需要注意:一切实现程序逻辑的代码都应放在后置的C#文件中-。

<!-- XAML中的事件订阅 -->
<Button x:Name="btnOk"
Content="点击我"
Click="Button_Click"/>

// 后置C#代码中的事件处理器
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("按钮被点击了!");
}

// 也可以在C#中通过代码订阅事件
this.btnOk.Click += BtnOk_Click;-2
导入程序集和引用其中的名称空间

在XAML中使用xmlns(XML命名空间)声明来引用程序集及其中的名称空间-。

语法格式为:xmlns:映射名="clr-namespace:类库中名称空间的名字;assembly=类库文件名"

xmlns冒号后的映射名是可选的,引号中的字符串指定要引用的类库及名称空间。

与C#中的using类似,但XAML需要为被引用的名称空间添加一个映射名来代表它。引用外部程序集时,需要先在项目中添加对该程序集的引用。

<!-- 引用当前程序集中的自定义命名空间 -->
xmlns:local="clr-namespace:MyWpfApp"

<!-- 引用外部程序集中的命名空间 -->
xmlns:my="clr-namespace:MyNamespace;assembly=ClassLibrary1"-9

<!-- 在XAML中使用引用的类型 -->
<local:MyUserControl />
XAML的注释

XAML的注释语法继承自XML-1,使用<!---->包裹注释内容。注意事项

①注释只能出现在标签的内容区域(即开始标签和结束标签之间),不能出现在标签的Attribute位置-1;

②注释不能嵌套--1;

③避免在数据绑定表达式中使用注释-。

另外,XAML中还有一个特殊的<x:Code>标签,可以把本应放在后置代码中的C#代码搬到XAML文件中来,但其内容必须使用XML的CDATA转义标签。

<!-- 这是XAML中的单行注释 -->

<!--
这是XAML中的
多行注释
-->

<!-- 错误:不能在标签的Attribute位置注释 -->
<!-- 错误:注释不能嵌套 -->

<!-- 使用x:Code在XAML中嵌入C#代码(不推荐) -->
<x:Code>
<![CDATA[
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello");
}
]]>
</x:Code>-9

4、

知识点核心要点示例
x名称空间的由来和作用每个XAML程序的开头都有xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml",将XML名称空间映射到前缀x-1。x就是XAML的首字母-1-。x名称空间里的成员是专门写给XAML编译器看的,用来引导XAML编译器把XAML代码编译成CLR代码-2-——它是程序员与XAML编译器沟通的工具-6。<Window x:Class="WpfApp1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
...>

说明:第一行xmlns是WPF核心名称空间(无前缀,作为默认),第二行xmlns:x将XAML语言相关的名称空间映射到前缀x-17。
x名称空间里都有些什么x名称空间中的成员分为三类-1-5:①Attribute(如x:Classx:ClassModifierx:Namex:FieldModifierx:Key等)-1;②标记扩展(Markup Extension)(如x:Arrayx:Nullx:Staticx:Type等)-1;③XAML指令元素(如x:Codex:XData)-1。Attribute与Property的区别:Attribute是语言层面的、给编译器看的;Property是对象层面的、给编程逻辑用的-1-6。<!-- Attribute形式 -->
<Button x:Name="btnOk" Content="确定"/>

<!-- 标记扩展形式(用{}包裹) -->
<TextBlock Text="{x:Static local:MyClass.StaticText}"/>

<!-- XAML指令元素形式 -->
<x:Array Type="sys:String">
<sys:String>Item1</sys:String>
</x:Array>
x:Class告诉XAML编译器将XAML标签的编译结果与后台代码中指定的类合并-6-13。使用要求:①只能用于根节点(如Window、UserControl)-6-17;②根节点的类型与x:Class值所指示的类型保持一致-6-19;③目标类在声明时必须使用partial关键字-6-13。正是由于partial机制,XAML解析生成的类与C#文件里定义的类合二为一-13。<!-- XAML中 -->
<Window x:Class="MyApp.MainWindow"
...>

//后台C#代码中(Window1.xaml.cs)
namespace MyApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}

说明:XAML编译器生成的类与C#中的partial类合并为一个完整的类-13。
x:ClassModifier

这个属性同样不常用。必须和x:Class一起使用。

核心作用:用来修改由x:Class指定的、整个窗口或控件类访问级别

<Window x:Class="MyApp.MainWindow"
x:ClassModifier="internal"
...>

说明:生成的MainWindow类将被标记为internal访问级别,而不是默认的public--5。
x:Name

使用频率极高

核心作用:为XAML中声明的UI元素,创建一个可以在C#后台代码中直接引用的变量名。

<!-- 使用x:Name为控件命名 -->
<Button x:Name="btnSubmit" Content="提交"/>
<TextBox x:Name="txtUserName" Width="200"/>

// 在C#后台代码直接引用
private void BtnSubmit_Click(object sender, RoutedEventArgs e)
{
string name = txtUserName.Text;
MessageBox.Show("你好," + name);
}

说明:通过x:Name声明的变量可以在C#代码中直接访问对应的控件实例-17。
x:FieldModifier

这个属性不常用。

它是在x:Name的基础上。

核心作用:用来修改由x:Name生成的引用变量的访问级别

<!-- 将按钮的引用变量设为public-->
<Button x:Name="btnOk"
x:FieldModifier="public"
Content="确定"/>

<!-- 将文本框的引用变量设为private-->
<TextBox x:Name="txtInput"
x:FieldModifier="private"
Width="200"/>

说明x:FieldModifier="public"使得btnOk这个引用变量在其他程序集中也能被访问-。

1

http://www.jsqmd.com/news/1178458/

相关文章:

  • 现代C++项目构建实战:CMake、动态库与多态性应用指南
  • C#高性能截屏实战:基于DXGI与P/Invoke的封装与内存泄漏排查
  • C语言:函数判断闰年实现函数判断year是不是润年(作业考试学习必备系列003)
  • DS输入在8K视频终传中的核心价值与工作流优化实践
  • 企业微信会话存档 SDK 1.2:Linux/Windows 双平台部署与动态库路径配置 3 要点
  • 参数级精度控制,深度拆解Midjourney --s、--w、--style、--stylize 四大权重指令的底层逻辑与协同效应
  • 2026 年至今,安达知名的工法样板安全体验区销售厂家竞争格局,别再迷信经验了!这处角落把90%的安全事故提前清零 - 行业推荐【认证官】
  • AD7175-8与TM4C1294NCPDT在精密信号采集系统中的应用
  • League Akari:英雄联盟玩家的智能本地助手完全指南
  • C++观察者模式:从设计原理到线程安全实现详解
  • 英雄联盟数据分析利器:League Akari 帮你从游戏数据中挖掘制胜之道
  • 数据科学伦理实践:从平台算法争议看可解释性与审计机制
  • 2026年横评:7大宁波小学数学小升初机构横向对比
  • 2026年最新盘点8个一键生成论文工具,从选题到润色全包了!
  • SAP SD V/08 定价过程配置实战:3种销售场景(标准/公司间/免费)差异详解
  • Xcode 版本与 Swift 编译器对应关系解析:从 5.3 到 6.2 的 5 个关键变化
  • C++关联容器map与set:从红黑树原理到工程实践详解
  • 7天精通PS4存档管理:Apollo Save Tool完全指南
  • WPS 与 Excel CSV 乱码处理差异:5 个关键设置与兼容性测试
  • CellPose:基于深度学习的通用细胞分割算法技术深度解析
  • 降AIGC终极攻略!AI率92%暴降至5%!实测10款AI智能降重工具!学生党狂喜!
  • Anaconda 环境冲突深度解析:pip 与 conda 混用导致 Spyder 启动失败的 2 种修复方案
  • 强韧肌底精华液哪家效果好:蜜妙诗加固屏障 - MXyuyu
  • 2026年研究生提前答辩降AI急救攻略:提前答辩AI率超标4.8元快速达标完整方案
  • Pixhawk飞控微调原理与实操:解决悬停漂移和遥控偏移
  • C++实现非遗文化推荐系统:协同过滤算法与高性能架构实践
  • Godot Tween动画完全指南:从基础到高级实战技巧
  • 2025-2026行业头部机构参访指南:提前要做的7项准备工作
  • Git 2.45.0 服务器端自动同步实战:3步配置WebHook实现代码秒级部署
  • 《自白》悬疑剧解析:4K画质下的心理博弈与叙事结构