xaml详解

XAML结构

<根元素
x:Class="XAML编译器编译的结果要与后台编译结果合并的类(这个是对x命名空间的使用,也就是使用x命名空间中的Class元素)"
    xmlns="默认的 xmlns 命名空间"
    xmlns:x="这个是对xml命名空间的声明,声明的名字叫做x(一般默认为x)"
    xmlns:UserClassLibrary="使用用户的类库(提前添加引用并using),名字User ClassName可随机取"
    根元素的属性A="例如窗体的高度"
    根元素的属性B="例如窗体的宽度"
    ......>
	<子元素>
		......
	</子元素>
</根元素节点>

实例

<Window
    x:Class="WpfApp1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ControlLibrary="clr-namespace:ControlLibrary;assembly=ControlLibrary"
    Title="MainWindow"
    Width="500"
    Height="350">
    <Grid>
        ......
    </Grid>
</Window>

x:Class

x:Class="WpfApp1.MainWindow"   
这个Attribute是告诉XAML编译器将XMAL编译器编译的结果和后台编译结果的wpfApp1.MainWindow类编译后合并。(这个是对x命名控件的使用,也就是说使用了x命名空间的Class元素)

xmlns

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
默认(WPF)使用的命名空间,映射双引号内的url

xmlns:x

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
声明了一个XAML命名空间,他的名字叫做x,映射双引号内的url,它包含的类均与解析XAML语言相关,用户可以使用声明的x命名空间中的一系列工具。
例如:x:Name、x:Class、x:ClassModifier

xmlns:ControlLibrary

xmlns:ControlLibrary="clr-namespace:ControlLibrary;assembly=ControlLibrary"
xmlns:ControlLibrary与xmlns:x类似,它声明了一个用户自定义的用于XAML的命名空间“ControlLibrary”(名字可自定义),它将用户自定义的类库映射到了XAML中,用户可以在XAML界面中去使用自定义的命名空间所包含的内容。

交互

在wpf中,与用户交互,数据处理等与界面不相关的功能,会在与标记相关联的C#代码中实现,此类代码称为代码隐藏。

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.AWindow"
    Title="Window with Button"
    Width="250" Height="100">

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

</Window>

using System.Windows; // Window, RoutedEventArgs, MessageBox

namespace SDKSample
{
    public partial class AWindow : Window
    {
        public AWindow()
        {
            // InitializeComponent call is required to merge the UI
            // that is defined in markup with this class, including  
            // setting properties and registering event handlers
            InitializeComponent();
        }

        void button_Click(object sender, RoutedEventArgs e)
        {
            // Show message box when button is clicked.
            MessageBox.Show("Hello, Windows Presentation Foundation!");
        }
    }
}
  • x:Class 特性用于将标记与代码隐藏类相关联
  • 从代码隐藏类的构造函数调用 InitializeComponent,以将标记中定义的 UI 与代码隐藏类合并在一起。 ``
  • 代码隐藏类还可实现按钮的 Click 事件的事件处理程序。 单击该按钮后,事件处理程序会通过调用 System.Windows.MessageBox.Show 方法显示一个消息框。

控件

布局

  • Canvas:子控件提供其自己的布局。
  • DockPanel:子控件与面板的边缘对齐。
  • Grid:子控件由行和列定位。
  • StackPanel:子控件垂直或水平堆叠。
  • VirtualizingStackPanel:子控件在水平或垂直的行上虚拟化并排列。
  • WrapPanel:子控件按从左到右的顺序定位,在当前行上的控件超出允许的空间时,换行到下一行。

数据绑定

  • 将数据从托管对象复制到控件,在控件中可以显示和编辑数据。
  • 确保使用控件对数据所做的更改将复制回托管对象。

实例

下一示例演示如何将 TextBox 绑定到自定义 Person 对象的实例。

namespace SDKSample
{
    class Person
    {
        string name = "No Name";

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }
}

下面的标记将绑定 TextBox 到自定义对象的实例 Person

<Window
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     x:Class="SDKSample.DataBindingWindow">

   <!-- Bind the TextBox to the data source (TextBox.Text to Person.Name) -->
   <TextBox Name="personNameTextBox" Text="{Binding Path=Name}" />

 </Window>
using System.Windows; // Window

namespace SDKSample
{
    public partial class DataBindingWindow : Window
    {
        public DataBindingWindow()
        {
            InitializeComponent();

            // Create Person data source
            Person person = new Person();

            // Make data source available for binding
            this.DataContext = person;
        }
    }
}
  • 使用“{Binding ... }”XAML 语法,将TextTextBox 属性被绑定至 Person.Name 属性。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×