• WPF: XAML语法规范详解


    WPF(Windows Presentation Foundation)是.NET框架的一个组成部分,用于构建桌面应用程序的用户界面。XAML(Extensible Application Markup Language)是一种基于XML的标记语言,用于定义WPF应用程序的界面和逻辑。

    一、基本语法

    XAML文件扩展名为.xaml,它是一种XML格式的文件。XAML文件通常包含以下部分:

    • xmlns属性:定义命名空间,用于引用不同的XML命名空间。
    • xmlns:x属性:定义XAML语言的命名空间。
    • Window标记:表示窗口对象。
    • Title属性:设置窗口的标题。
    • Width和Height属性:设置窗口的宽度和高度。
    • Content属性:设置窗口的显示内容。
    <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="WPF XAML示例" Width="800" Height="600">
        <Grid>
            
        Grid>
    Window>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    二、XAML语言的基本元素

    XAML语言的基本元素包括元素、属性和事件。

    元素
    XAML中的元素类似于HTML标签,用于表示用户界面中的各种控件。例如,Button元素用于创建一个按钮控件。

    <Button Content="点击我" Width="100" Height="50" Click="Button_Click"/>
    
    • 1

    属性
    属性用于定义元素的特性,如颜色、大小、文本等。属性可以设置值,也可以通过属性绑定与数据源进行关联。

    <Button Content="点击我" Width="100" Height="50" Background="Red" FontSize="16"/>
    
    • 1

    事件
    事件用于响应用户操作,如点击、鼠标悬停等。在XAML中,事件通过命名空间引用来声明。

    <Button Content="点击我" Width="100" Height="50" Click="Button_Click"/>
    
    • 1

    三、XAML的结构

    XAML的结构包括根元素、子元素和对联。

    根元素
    XAML文件中的根元素通常是Window元素,它表示应用程序的窗口。

    <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="WPF XAML示例" Width="800" Height="600">
        
    Window>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    子元素
    子元素是根元素内部的控件,用于构建用户界面。

    <Grid>
        <Button Content="点击我" Width="100" Height="50" Click="Button_Click"/>
    Grid>
    
    • 1
    • 2
    • 3

    对联
    对联用于在XAML中放置多个相关元素,使布局更加灵活。

    <StackPanel Orientation="Horizontal">
        <Button Content="按钮1" Width="100" Height="50" Click="Button_Click"/>
        <Button Content="按钮2" Width="100" Height="50" Click="Button_Click"/>
    StackPanel>
    
    • 1
    • 2
    • 3
    • 4

    四、XAML中的属性

    XAML中的属性包括属性值、属性绑定等。

    属性值
    属性值是用于设置元素特性的具体值。

    <Button Content="点击我" Width="100" Height="50" Background="Red" FontSize="16"/>
    
    • 1

    属性绑定
    属性绑定用于将元素属性与数据源进行关联。

    <Button Content="{Binding ButtonText}" Width="100" Height="50" Background="Red" FontSize="16"/>
    
    • 1

    事件
    事件用于响应用户操作,如点击、鼠标悬停等。

    <Button Content="点击我" Width="100" Height="50" Click="Button_Click"/>
    
    • 1

    数据绑定
    数据绑定用于将控件属性与数据源进行关联。

    <DataGrid DataSource="{Binding DataSource}" Columns="{Binding DataColumns}"/>
    
    • 1

    五、示例

    以下是一个完整的示例,展示了XAML语法在不同实际应用场景中的运用:

    <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="WPF XAML示例" Width="800" Height="600">
        <Grid>
            <StackPanel Orientation="Horizontal">
               <Button Content="点击我" Width="100" Height="50" Click="Button_Click"/>
                <TextBlock Text="{Binding ButtonText}" FontSize="20"/>
            StackPanel>
            <DataGrid DataSource="{Binding DataSource}" Columns="{Binding DataColumns}"/>
        Grid>
    Window>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这个示例中,我们创建了一个窗口,其中包含一个水平堆叠的按钮和文本块。按钮的点击事件与Button_Click事件处理器绑定。文本块的内容与ButtonText属性绑定,显示按钮的文本。数据网格的数据源与列绑定到DataSource和DataColumns属性。

    六、数据源和数据集合

    在WPF中,数据源可以是任何CLR类型,包括对象列表、字典、集合等。数据集合通常使用List、ObservableCollection或其他可观察的集合类型。

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new MainViewModel();
        }
    }
    
    public class MainViewModel
    {
        public ObservableCollection<string> DataSource { get; set; }
    
        public MainViewModel()
        {
            DataSource = new ObservableCollection<string>{ "Item1", "Item2", "Item3" };
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这个C#代码示例中,MainViewModel类包含一个ObservableCollection类型的DataSource属性,它在构造函数中初始化为包含三个字符串项的集合。这个类被设置为窗口的DataContext,使得XAML中的数据绑定能够正确工作。

    七、数据过滤

    数据过滤可以通过数据绑定的Converter属性来实现。Converter是一个实现了IValueConverter接口的转换器,它可以用来在显示数据之前对其进行过滤或转换。

    <DataGrid DataSource="{Binding DataSource, Converter={StaticResource FilterConverter}}"/>
    
    • 1

    在C#代码中,FilterConverter可能这样实现:

    public class FilterConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is IEnumerable<string> strings && !string.IsNullOrEmpty(parameter as string))
            {
                return strings.Where(s => s.StartsWith(parameter as string)).ToList();
            }
            return value;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    这个转换器接受一个字符串列表作为输入,并返回一个新的列表,其中只包含以指定参数开头的字符串。

    通过上述的详解和示例,开发者可以更好地理解WPF XAML语法规范的应用,并能够使用它来构建结构化和功能丰富的用户界面。

  • 相关阅读:
    进程调度的基本过程
    我们要不要使用 ORM?
    元气森林推“有矿”,农夫山泉们跟着“卷”?
    Flutter笔记:GetX模块中不使用 Get.put 怎么办
    教师资格证报名浏览器不兼容 - 解决方案
    Java 复习笔记 - 常见算法:查找算法
    Linux之管道符
    [SWPUCTF 2021 新生赛] web
    互联网摸鱼日报(2023-09-07)
    【数据结构与算法】| 链表练习
  • 原文地址:https://blog.csdn.net/qq_35320456/article/details/137884824