x名称空间指向http://schemas.microsoft.com/winfx/2006/xaml.它包含的类与xaml有关.
大致有以下一些:
attribute:
X:class 告诉XAML编译器将XAML标签的编译结果与后台的哪个类合并
x:classmodifier 生成的类的访问级别 与x:class 指定的类的控制级别必须相同
x:fieldmodifier 是用来改变引用变量访问级别的
x:key 把东西存放到资源字典Resource Dictionary里的Key,检索时用这个Key
x:name XAML标签对应对象的Name属性也设为x:Name的值,并把这个值注册到UI树上,方便查找
x:type 扩展标记,数据的类型
一个x:key和x:type的demo;
public class myButton : Button
{
public Type UserWindowType { set; get; } //自定义的属性
protected override void OnClick()
{
base.OnClick();
Window win = Activator.CreateInstance(UserWindowType) as Window;
if (win != null)
{
win.ShowDialog();
}
}
}
}
自定义一个button,增加一个属性为type类型
重写点击事件,创建一个对象以我们定义的类型,并强制转为window
布局:
<Window x:Class="x名称空间.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:x名称空间"
mc:Ignorable="d"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<local:myButton UserWindowType="{x:Type TypeName=local:Window1}" Margin="5">Show</local:myButton>
</StackPanel>
</Window>
添加local名称空间导入本地的程序集
创建了自定义的button ,属性使用x名称空间的扩展标记x:type。为本地的window1,所以创建一个window1的窗口
点击解决方案中的添加,添加窗口window1,
布局:
<Window x:Class="x名称空间.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:x名称空间"
mc:Ignorable="d"
Title="Window1" Height="300" Width="300"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
>
<Window.Resources>
<sys:String x:Key="str">Hello</sys:String>
</Window.Resources>
<StackPanel>
<TextBlock Margin="5" Text="{StaticResource str}"></TextBlock>
<TextBlock x:Name="text1" Margin="5"></TextBlock>
<Button Margin="5" Click="Button_Click">Show</Button>
</StackPanel>
</Window>
资源中使用x:key定义了一个值;
在textblock中使用了定义的值
button的事件处理函数
private void Button_Click(object sender, RoutedEventArgs e)
{
text1.Text = (string)FindResource("str");
}
使用findResource根据关键字找到定义的值。
实际运行效果: