1、wpf程序引用的x名称空间:/winfx/2006/xaml,它包含的类多与解析xaml语言相关,可称为xaml名称空间。
2、xaml也有自己的编译器,xaml语言被解析并编译,最终形成IL(微软中间语言)存储在assembly中
3、x名称空间包含的工具
名称 |
种类(在xaml中出现的形式) |
解释 |
常用程度 |
x:Array |
标签扩展 |
构建一个ArrayList实例,参照下方代【码片段01】 |
不太常用 |
x:Class |
Attribute |
告诉xaml编译器将xaml标签的编译结果和code-behind代码中指定的类进行合并 1、只能用于根节点,如<Window>、<UserControl> 2、根节点类型和x:Class指示的类型一直 3、x:Class指示的类必须使用partial关键字 |
常用 |
x:ClassModifier | Attribute |
指示xaml编译生成的类的访问级别,如public、internal 1、要配合x:Class使用 2、x:ClassModifier的值必须和partial类的访问控制级别一致 3、x:ClassModifier的值随着后台语言(C#,VB,F#)的不同而不同 |
不太常用 |
x:Code |
XAML指令元素 |
参照《XAML篇(2)》中的x:Code代码示例,其实基本没用 |
基本没用 |
x:FieldModifier |
Attribute |
针对x:Name声明的变量,设置它的访问控制级别,前提是也使用x:Name,如果没有设置Name或者x:Name,编译会报错 |
不太常用 |
x:Key |
Attribute |
一般用在Resource Dictionary中,用作检索的索引 |
常用 |
x:Name |
Attribute |
1、为xaml编译生成的对象声明一个引用变量,变量名就是x:Name的值 2、将对象的Name属性(如果有),也设置为x:Name的值,并把这个值注册到UI树上,以方便查找 3、有些元素没有Name属性,如果考虑统一性和可读性,建议全部使用x:Name,否则可以使用Name属性(其实没多大差别) |
常用 |
x:Null |
标签扩展 |
为属性赋空值 |
不太常用 |
x:Shared |
Attribute |
1、一定要和x:Key配合使用 2、true:每次使用资源都是同一个对象,false:每次使用资源是这个对象的一个新副本 3、xaml编译器默认为资源添加x:Shared="true" |
不太常用 |
x:Static |
标签扩展 |
1、为xaml属性直接赋值一个static对象 2、在国际化时可以使用static属性,当然国际化也可以使用dynamic resource引用Resource Dictionary的字符串资源 3、为radiobutton传递枚举参数,参照【代码片段02】 |
常用 |
x:Subclass |
Attribute |
用于不支持partial关键字的语言(如F#) |
基本不用 |
x:Type |
标签扩展 |
为Type属性指定一个值,参照【代码片段03】 |
常用 |
x:TypeArguments |
Attribute |
在xaml中为泛型类提供类型参数,只能用于根元素 |
基本不用 |
x:Uid |
Attribute |
独立于x:Name,主要用于国际化,详细参照: /en-us/dotnet/framework/xaml-services/xaml-namespace-x-language-features |
不太常用 |
x:XData |
XAML指令元素 |
配合XamlDataProvider,提供xml数据作为数据源,参照【代码片段04】 |
不太常用,不过可以在UI测试时使用 |
标签扩展:在使用要包含在花括号{}内部使用,是MarkupExtension类的直接或间接派生类
Attribute:直接在元素的Attribute使用
XAML指令元素:告诉编译器这是一段指令或代码
x空间全部以及xaml 2009包含的语言特性参照:
/en-us/dotnet/framework/xaml-services/xaml-namespace-x-language-features
/en-us/dotnet/framework/xaml-services/xaml-2009-language-features
代码片段01:
-
<>
-
<x:Array x:Key="testArray" Type="{x:Type sys:String}">
-
<sys:String>Test String1</sys:String>
-
<sys:String>Test String2</sys:String>
-
<sys:String>Test String3</sys:String>
-
<sys:String>Test String4</sys:String>
-
</x:Array>
-
</>
-
<Grid>
-
<ComboBox
-
Width="200"
-
VerticalAlignment="Center"
-
ItemsSource="{StaticResource testArray}"
-
SelectedIndex="0" />
-
</Grid>
显示效果:
代码片段02
-
<>
-
<local:GenderToCheckedConverter x:Key="GenderToCheckedConverter" />
-
</>
-
<Grid>
-
<StackPanel
-
HorizontalAlignment="Center"
-
VerticalAlignment="Center"
-
Orientation="Horizontal">
-
<RadioButton Content="男" IsChecked="{Binding GenderValue, Mode=TwoWay, Converter={StaticResource GenderToCheckedConverter}, ConverterParameter={x:Static local:}}" />
-
<RadioButton Content="女" IsChecked="{Binding GenderValue, Mode=TwoWay, Converter={StaticResource GenderToCheckedConverter}, ConverterParameter={x:Static local:}}" />
-
</StackPanel>
-
</Grid>
-
public enum Gender
-
{
-
Male,
-
Female
-
}
-
-
-
public class GenderToCheckedConverter : IValueConverter
-
{
-
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
-
{
-
Gender gender = (Gender)value;
-
Gender parameterGender = (Gender)parameter;
-
return gender == parameterGender;
-
}
-
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
-
{
-
bool isChecked = (bool)value;
-
if (isChecked)
-
{
-
return (Gender)parameter;
-
}
-
else
-
{
-
return null;
-
}
-
}
-
}
代码片段03
-
<Style TargetType="{x:Type TextBlock}">
-
<Setter Property="Foreground" Value="Red"></Setter>
-
<Setter Property="VerticalAlignment" Value="Center"></Setter>
-
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
-
<Setter Property="FontSize" Value="20"></Setter>
-
</Style>
-
也可以写成:
-
<Style TargetType="TextBlock">
-
<Setter Property="Foreground" Value="Red"></Setter>
-
<Setter Property="VerticalAlignment" Value="Center"></Setter>
-
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
-
<Setter Property="FontSize" Value="20"></Setter>
-
</Style>
-
______________________________________________________________________________________________________________________________________________
-
<Border
-
Width="300"
-
Height="200"
-
BorderBrush="Red"
-
BorderThickness="1">
-
<TextBox
-
HorizontalAlignment="Center"
-
VerticalAlignment="Center"
-
BorderBrush="{Binding BorderBrush, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TypeName=Border}}}"
-
BorderThickness="1"
-
Text="test text" />
-
</Border>
代码片段04
-
<>
-
<XmlDataProvider x:Key="TestData" XPath="/Root">
-
<x:XData>
-
<Root xmlns="">
-
<Student Name="test1Name" />
-
<Student Name="test2Name" />
-
</Root>
-
</x:XData>
-
</XmlDataProvider>
-
</>
-
<Grid>
-
<ListBox
-
Width="200"
-
Height="200"
-
HorizontalAlignment="Center"
-
VerticalAlignment="Center"
-
ItemsSource="{Binding Source={StaticResource TestData}, XPath=Student/@Name}" />
-
</Grid>