XAML 格式
提示
由于我们将本文档从内置 XAML 模式迁移到网页,部分组件展示效果可能和实际不同,请以启动器内为准。
作者: 龙腾猫跃、XiaoFans、林小槐、TCJ
本篇简单介绍了在 PCL 中使用 XAML 进行自定义页面的相关语法。由于内容繁多,建议下载本篇代码参考学习。
纯文本
每个 local:MyCard 代表一张卡片,你可以添加、删除格式类似的 MyCard 来添加多个卡片。每个 TextBlock 代表一段文本,你可以在 Text 属性中书写任何你想写的内容,也可以自行添加更多的 TextBlock。
你可以通过添加、删除属性修改样式,例如上一行的 FontSize 就会将字号改为 11 号。
它还有许多可以调整的属性:上一行的 Margin 调整了边距,Foreground 则会让文字变色。
这是一段普通文本。
这段文字使用了 FontSize="11" 属性。
这段文字使用了 Foreground 属性改变颜色。
卡片与提示条
卡片(local:MyCard)的 Title 属性决定了它的标题。
为卡片添加 CanSwap 属性让它可以被折叠,True 代表是,False 代表否。在此基础上,再使用 IsSwapped 属性调整它是否默认被折叠。
这是卡片的内容区域。
长宽属性与图片
任意项目都可以添加 Width 与 Height 属性来控制宽高。HorizontalAlignment 属性可以控制对齐:Center 代表居中,Right 代表居右。
local:MyImage 代表图片,你需要在它的 Source 属性中填写一个网址或文件路径,它会从该处获取图片并显示。通常需要使用 Height 限制它的高度。

Height="50" 限制图片高度
如果有多个网址,也可以通过设置 FallbackSource 属性来设置备用地址。
当从网址 1 获取图片失败后,会自动从网址 2 获取图片。
按钮
添加 local:MyButton 即可新建一个按钮。你需要限定它的尺寸与位置,并通过 Padding 属性进一步控制它的内边距。
你可以修改 ColorType 属性来调整按钮配色:Highlight 代表当前主题色,Red 代表红色。ToolTip 属性还可以让你在鼠标悬浮在上面的时候显示提示文本。
local:MyTextButton 是没有边框的"纯文本按钮",其作用与 local:MyButton 一致。
自定义事件
将按钮的 EventType 属性设为打开网页,然后在 EventData 属性中写入网址,即可通过点击按钮打开网页。
或者将 EventType 属性改为弹出窗口,然后在 EventData 属性中写入弹窗的标题与内容……
点击后会弹出窗口,标题与内容以竖线间隔
local:MyTextButton 同样可以设置 EventType 与 EventData 让它具有特定功能。
横向布局
你需要使用 StackPanel 在一行里塞下多个按钮。你可以仅在这个教学卡片的基础上稍作调整,来实现自己的按钮布局。
列表项
你也可以使用列表项 local:MyListItem 来替代按钮,其使用方式与按钮类似。
Logo 属性为列表项的图标,指定的可以是链接也可以是文件路径;Title 是大标题,Info 是可选的小标题(详细信息);Type 如果省略,该列表项则单纯只展示信息,仅当 Type 为 Clickable 才能触发点击效果。
EventType、EventData 与按钮几乎一致。唯一不同的是,列表项联网加载帮助文件时,必须手动设置 Title、Info、Type、Logo 属性。
内置图片
PCL 内置了一些 Minecraft 方块与物品图片,可以直接使用。
使用时,将上方对应行的 Source 复制到 MyListItem 的 Logo 属性处即可。
主题色
你可以用类似 {DynamicResource ColorBrush5} 的格式使用 PCL 当前的主题颜色,修改末尾的数字编号以改变颜色浓度。
除了字体颜色,你也可以将主题色用于背景色、边框颜色等颜色参数。
进阶:Grid 布局
如果要实现更复杂的布局,则必须使用 Grid。Grid 可以让按钮们自动适应窗口宽度:随意拉伸 PCL 窗口,按钮大小会自动改变。
你可以上网查找 "WPF Grid" 的相关教程,这里仅给出一个例子,不作详细介绍。你可以仅在这个教学卡片的基础上稍作调整,来实现自己的按钮布局。
进阶:图标按钮
MyIconTextButton 是一种带有自定义矢量图标的按钮变体,它同样支持 EventType 与 EventData 属性。
通过设置 Logo 属性来控制它的图标,设置 LogoScale 属性还可以调整图标的缩放比例。
Logo 属性的内容是 SVG Path 的值,你需要使用 SVG 编辑器或者从图标资源网站(如 IconFont)查找它。不要自己写,写不懂的。
此外,它还有两种 ColorType:Black(默认)和 Highlight。
如果只想要图标,不要文字,还可以使用 MyIconButton。它不能设置 Text 属性,只有一个图标可以按。
它的 Theme 属性可以设置为 Color(默认)、White、Black、Red。
如果只想显示一个图标,不想让它是能按的按钮,可以使用 WPF 自带的 Path 等绘图控件,感兴趣的话可以自行搜索。想偷懒也可以把 MyIconButton 的 IsHitTestVisible 属性改为 False……
进阶:联网自定义主页
如果你在尝试制作联网更新的自定义主页,可以查看下方的 GitHub 讨论页。
你可以根据其中的介绍为主页添加版本号检查以节省流量,也可以通过检查 Referer 和 User Agent 来确定对方的 PCL 版本。
属性参考
全部通用属性
| 属性 | 说明 |
|---|---|
Width、Height | 设置宽度与高度 |
ToolTip | 设置鼠标指向时的提示文本 |
Margin | 调整外边距(格式为 左,上,右,下。例如 Margin="0,0,0,2" 即为 2 单位的下边距) |
HorizontalAlignment | 设置横向对齐方式;居左:Left、居中:Center、居右:Right、拉伸(默认):Stretch |
VerticalAlignment | 设置纵向对齐方式;居上:Top、居中:Center、居下:Bottom、拉伸(默认):Stretch |
IsHitTestVisible | 该控件是否响应交互(点击、指向动画等);True 为是(默认),False 为否 |
TextBlock(纯文本)
| 属性 | 说明 |
|---|---|
Text | 设置显示的文本(如果要使用引号等特殊字符,自行百度 XAML 转义) |
TextWrapping | 开启自动换行 |
FontSize | 设置字号 |
FontWeight | 设置为 Bold 时,文字加粗 |
Foreground | 调整前景颜色(十六进制字符串,例如 #FF010203 代表 ARGB 中的 255,1,2,3。前两位代表不透明度,FF 为全不透明,00 为全透明) |
local:MyImage(图片)
| 属性 | 说明 |
|---|---|
Source | 要显示的图片的网址,或 PCL 内置图片位置 |
FallbackSource | 当 Source 首次下载失败时,会从该备用地址加载图片 |
LoadingSource | 正在下载网络图片时显示的本地图片(不支持联网下载);默认为 pack://application:,,,/images/Icons/NoIcon.png |
EnableCache | 若图片是联网获取的,是否将图片保存到本地缓存,在 7 天内不再重新下载;True 为是(默认),False 为否 |
local:MyCard(卡片)
| 属性 | 说明 |
|---|---|
Title | 设置显示的标题文本 |
CanSwap | 卡片是否可以折叠,True 为是,False 为否 |
IsSwapped | 卡片是否默认折叠,要求 CanSwap 必须为 True |
HorizontalAlignment | 若使用,要求 CanSwap 必须为 False |
UseAnimation | 是否在展开等高度改变时触发动画;True 为是(默认),False 为否 |
SwapLogoRight | 卡片折叠时的箭头是朝下还是朝右;True 为朝右,False 为朝下(默认) |
HasMouseAnimation | 是否在鼠标指向时改变卡片颜色;True 为是(默认),False 为否 |
local:MyHint(提示条)
| 属性 | 说明 |
|---|---|
Text | 设置显示的文本( 代表换行) |
Theme | 设置颜色主题(Blue、Yellow 或 Red) |
local:MyButton(按钮)
| 属性 | 说明 |
|---|---|
Text | 设置显示的文本 |
Padding | 设置内边距,格式与 Margin 一致 |
ColorType | 设置颜色主题(Highlight 为当前启动器的主题颜色,Red 为红色,默认为黑色) |
EventType、EventData | 触发特定事件 |
local:MyTextButton(文本按钮)
| 属性 | 说明 |
|---|---|
Text | 设置显示的文本 |
EventType、EventData | 触发特定事件 |
local:MyListItem(列表项)
| 属性 | 说明 |
|---|---|
Logo | 列表项的图标(所指定的可以是链接也可以是文件路径) |
Title | 列表项的大标题 |
Info | 列表项的详细信息,它将会以灰色显示在大标题下方 |
Type | 若留空仅单纯展示信息,设置为 Clickable 触发相应活动 |
local:MyIconTextButton(带图标的按钮)
| 属性 | 说明 |
|---|---|
Text | 设置显示的文本 |
Logo | 设置显示的图标 |
LogoScale | 设置图标的缩放,默认为 1 |
ColorType | 设置颜色主题(Highlight 为当前启动器的主题颜色,默认为黑色) |
EventType、EventData | 触发特定事件 |
local:MyIconButton(图标按钮)
| 属性 | 说明 |
|---|---|
Logo | 设置显示的图标 |
LogoScale | 设置图标的缩放,默认为 1 |
Theme | 设置颜色主题,Color(默认)为当前启动器的主题颜色,也可设置为 White、Black、Red |
EventType、EventData | 触发特定事件 |
默认命名空间
默认会声明以下命名空间:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:PCL;assembly=Plain Craft Launcher 2"除此之外,不能声明其他命名空间。
