使用示例
以下示例展示如何将控件和主题包组合到真实页面中。截图来自项目 Gallery;瀑布流示意图为本指南专门绘制。完整可运行示例可查看 Gallery 源码。
1. 简单表单
Md3 控件可直接使用 Avalonia 标准绑定与命令。和原生控件一样,将属性绑定到 ViewModel 即可。
<StackPanel Margin="24" Spacing="16">
<TextBlock Text="New workspace" />
<md:MdTextBox Label="Workspace name"
Text="{Binding WorkspaceName}" />
<md:MdComboBox Label="Platform"
Variant="Outlined"
ItemsSource="{Binding Platforms}"
SelectedItem="{Binding SelectedPlatform}" />
<md:MdButton Content="Create workspace"
Variant="Filled"
Command="{Binding CreateCommand}" />
</StackPanel>
上例中的 md 对应 Md3.Avalonia.Controls namespace。先在 App.axaml 中注册 MaterialTheme;详见快速上手。

2. 图标操作按钮
安装 Md3.Avalonia.Icons 或 Md3.Avalonia.Icons.Lite 之一,再通过公开图标目录为核心图标按钮指定 glyph。图标包会自动注册内嵌字体。
<StackPanel Orientation="Horizontal" Spacing="12">
<md:MdIconButton Icon="{x:Static md:MdSymbols.Edit}"
Variant="Filled"
Command="{Binding EditCommand}"
AutomationProperties.Name="Edit workspace" />
<md:MdButton Content="Create"
Variant="Tonal"
Command="{Binding CreateCommand}" />
</StackPanel>
MdSymbols 与 MdIconButton 位于相同的 Md3.Avalonia.Controls XAML namespace。若安装 Lite 包,则使用 MdSymbolsLite。

3. 应用动态配色
从 seed color 生成色彩角色,并在应用级别应用。请在注册 MaterialTheme 后调用;主题资源为动态资源,角色变化时控件会随之更新。
using Avalonia.Controls;
using Avalonia.Styling;
using Md3.Avalonia.Themes.Dynamic;
var application = Application.Current!;
var options = new MdThemeOptions
{
SeedColor = "#006A6A",
SchemeVariant = MdThemeSchemeVariant.Expressive,
ContrastLevel = MdThemeContrastLevel.High,
ThemeMode = MdThemeMode.System
};
var useDarkScheme = application.ActualThemeVariant == ThemeVariant.Dark;
MdThemeManager.Apply(application, options, useDarkScheme);
ThemeMode.System 也会跟踪系统后续的浅色/深色变化。各 scheme、对比度、动效与形状选项详见 API 参考。
4. 使用 Extra 排列错落卡片
添加 Md3.Avalonia.Extra,并在核心主题后注册 ExtraTheme。MdWaterfall 会把子项放入当前最短的列。设置 Columns 可固定列数;保持默认值 0 时,则根据 MinColumnWidth 自适应计算列数。
<eco:MdWaterfall MinColumnWidth="220"
ColumnSpacing="12"
ItemSpacing="12">
<md:MdCard Variant="Elevated" Height="120" />
<md:MdCard Variant="Filled" Height="190" />
<md:MdCard Variant="Outlined" Height="90" />
<md:MdCard Variant="Elevated" Height="160" />
<md:MdCard Variant="Filled" Height="110" />
<md:MdCard Variant="Outlined" Height="200" />
</eco:MdWaterfall>
使用 xmlns:eco="using:Md3.Avalonia.Extra.Controls" 和 xmlns:md="using:Md3.Avalonia.Controls"。MdWaterfall 也支持 ItemsSource 绑定集合。可选包详情请见 NuGet 包指南。
5. 由 ViewModel 驱动的对话框
让 ViewModel 不持有控件引用:注入 IMdDialogService,显示对话框模型并等待结果。完整指南涵盖 Host、DataTemplate、取消行为与弹层所有权协调。
完整示例请参阅对话框服务指南及对应 API 参考。