Avalonia UI
首页支持GitHub 仓库English Doc
  • 👋欢迎
  • 文档
    • ⚡快速开始
      • IDE 支持
        • JetBrains Rider 设置
      • 使用 Avalonia 开发
        • Model-View-ViewModel 模式(MVVM)
        • 控件和布局
        • 数据绑定
        • 图像和动画
      • Windows
      • UserControls
      • 资产
      • 开发者工具
      • 错误和警告日志
      • 未处理的异常
      • 应用生命周期
    • 🔁数据绑定
      • 数据上下文
      • 变化通知
      • 绑定
      • 编译绑定
      • 与控件绑定
      • 转换绑定值
      • 绑定到命令
      • 绑定到任务和可观察对象
      • 使用代码进行绑定
      • 在控件模板中实现绑定
      • 绑定Classes
      • 创建和绑定到附加属性
      • Data Validation
    • 🎨样式
      • 样式
      • 选择器
      • 资源
      • 疑难解答
    • 🧰控件
      • AutoCompleteBox
      • Border
      • Buttons
        • Button
        • RepeatButton
        • RadioButton
        • ToggleButton
        • ButtonSpinner
        • SplitButton
        • ToggleSplitButton
      • Calendar
      • Canvas
      • Carousel
      • CheckBox
      • ComboBox
      • ContentControl
      • ContextMenu
      • Decorator
      • DataGrid
        • DataGridColumns
      • DatePicker
      • DockPanel
      • Expander
      • Flyouts
      • Grid
      • GridSplitter
      • Image
      • ItemsControl
      • ItemsRepeater
      • LayoutTransformControl
      • ListBox
      • MaskedTextBox
      • Menu
      • NativeMenu
      • NumericUpDown
      • Panel
      • ProgressBar
      • RelativePanel
      • ScrollBar
      • ScrollViewer
      • Separator
      • Slider
      • SplitView
      • StackPanel
      • TabControl
      • TabStrip
      • TextBlock
      • TrayIcon
      • TreeDataGrid
        • Creating a Hierarchical TreeDataGrid
        • Creating a Flat TreeDataGrid
        • TreeDataGrid column types
      • TimePicker
      • TextBox
      • ToolTip
      • TreeView
      • TransitioningContentControl
      • UserControl
      • Viewbox
      • Window
      • WrapPanel
    • 📚模板
      • 数据模板
      • 在代码中创建数据模板
      • 实现 IDataTemplate 接口
    • ✏️自定义控件
      • 控件类别
      • 定义属性
    • 🖱️输入
      • 路由事件
      • 剪贴板
      • 鼠标与触控设备
      • 快捷键
    • 🔑动画
      • 关键帧动画
      • 过渡
      • 页面过渡
    • 📐布局
      • 面板概述
      • Alignment、Margin 和 Padding
      • 创建自定义面板
    • 📦发布/分发
      • macOS
  • API 参考
    • 🗒️命名空间
      • Avalonia
      • Avalonia.Animation
        • Avalonia.Animation.Easings
        • Avalonia.Animation.Animators
      • Avalonia.Collections
      • Avalonia.Controls
      • Avalonia.Data
        • Avalonia.Data.Core.Plugins
        • Avalonia.Data.Core
        • Avalonia.Data.Converters
      • Avalonia.Diagnostics
      • Avalonia.Dialogs
  • 指南
    • 🐣基础
      • XAML 介绍
      • Code-behind
      • MVVM 架构
      • 在UI线程上操作
    • 🤿深入
      • 在树莓派上运行你的应用
      • 在树莓派上运行你的应用(使用Raspbian Lite)
      • ReactiveUI
        • 视图激活机制
        • 路由
        • 数据持久化
        • 绑定到 Sorted/Filtered 数据
    • 👩‍💻👩💻 开发人员指南
      • 🏭从源代码中构建 Avalonia
      • Avalonia 与 WPF 和 UWP 之间的比较
      • Debugging Previewer
      • Debugging the XAML compiler
      • macOS 开发
      • Release Process
      • 维护稳定的分支
  • 教程
    • 📋待办事项应用
    • 📻音乐商店应用
    • 🕸️在浏览器中运行
    • 📱为移动设备开发
  • 杂项
    • 👪社区
    • 🖥️WPF 开发者建议
    • 📋正在使用 Avalonia 的项目
    • ❔常见问题
由 GitBook 提供支持
在本页
  • 标记(Markup)
  • 代码隐藏(Code-behind)

这有帮助吗?

在GitHub上编辑
  1. 文档
  2. 快速开始

使用 Avalonia 开发

上一页JetBrains Rider 设置下一页Model-View-ViewModel 模式(MVVM)

最后更新于2年前

这有帮助吗?

Avalonia 允许使用 开发应用程序,使用C#(或其他的.NET语言)编码。通常使用 XAML 标记来实现应用程序的外观,使用代码来实现其行为。

标记(Markup)

XAML 是一种基于 XML 的标记语言,用声明的方式实现应用程序的外观。通常使用它来创建窗体和用户控件,并用控件、形状和图形来填充。

下面的示例展示了使用 XAML 实现包含单个按钮的窗口的外观:

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="AvaloniaApplication1.MainWindow"
        Title="Window with Button"
        Width="250" Height="100">

  <!-- Add button to window -->
  <Button Name="button">Click Me!</Button>

</Window>

具体来说,该 XAML 分别使用 Window 和 Button 元素定义窗体和按钮。每个元素都配置了属性,例如 Window 元素的 Title 属性,用于指定窗口的标题栏文本。在运行时,Avalonia 将标记中定义的元素和属性转换为 Avalonia 类的实例。例如,XAML 中的 Window 元素被转化为 Window 类的一个实例,它的 Title 属性就是 XAML 中的 Title 属性。

由于 XAML 是基于 XML 的,因此使用它编写的 UI 是在被称为元素树的嵌套元素层次结构中组装的。元素树能够直观且有逻辑地创建和管理 UI。

下图展示了在 Windows 操作系统上运行的上一个示例中 XAML 文件定义的用户界面:

代码隐藏(Code-behind)

应用程序的主要行为是实现响应用户交互的功能,包括处理事件(例如,单击菜单、工具栏或按钮)以及调用业务逻辑和数据访问逻辑作为响应。

下面的示例展示了上一个示例中更新的标记和代码隐藏(请注意,有两个选项卡):

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="AvaloniaApplication1.MainWindow"
        Title="Window with Button"
        Width="250" Height="100">

  <!-- Add button to window -->
  <Button Name="button" Click="button_Click">Click Me!</Button>

</Window>
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;

namespace AvaloniaApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            // Generated with Avalonia.NameGenerator
            InitializeComponent();
        }

        public void button_Click(object sender, RoutedEventArgs e)
        {
            // Change button text when button is clicked.
            var button = (Button)sender;
            button.Content = "Hello, Avalonia!";
        }
    }
}

x:Class 属性和 InitializeComponent 方法的组合能够确保在创建实现时正确初始化。代码隐藏类还为按钮的 Click(单击)事件实现了一个事件处理程序。单击按钮时,事件处理程序通过在 button 控件上设置属性来更改按钮的文本。

在 Avalonia 中,这种行为可以在与标记相关联的代码中实现。这种类型的代码称为。

在本例中,代码隐藏实现了一个从类派生的类。x:Class 属性用于将标记与该代码隐藏类相关联。从该代码隐藏类的构造函数中调用 InitializeComponent 方法,用于将标记中定义的 UI 与该代码隐藏类合并。 你可能会注意到 MainWindow 类被声明为 partial ,并且没有发现 InitializeComponent 方法的实现。这是因为 InitializeComponent 方法主体是由 包在分部类的对应方自动生成的,默认情况下,这个包包含在 Avalonia 模板中。

⚡
代码隐藏(code-behind)
Window
Avalonia.NameGenerator
XAML 标记语言