zoukankan      html  css  js  c++  java
  • x名称空间中的标记拓展

     1.x:Type

     Type类可作为所有数据类型在编程层面上的抽象。在XAML中,如果想表达某个数据类型时就需要使用x:Type标记拓展。例子:

    创建一个Button的派生类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    
    namespace WpfApplication3
    {
        class MyButton:Button
        {
            public Type UserWindowType { get; set; }
            protected override void OnClick()//是protected,不是public
            {
                base.OnClick();//激发Click事件
                Window win = Activator.CreateInstance(this.UserWindowType) as Window;
                if (win != null)
                {
                    win.ShowDialog();
                }
            }
        }
    }
    View Code

    添加一个MyWindow:

    <Window x:Class="WpfApplication3.MyWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            WindowStartupLocation="CenterScreen"
            Title="MyWindow" Height="170" Width="200">
        <Grid>
            <StackPanel Background="LightBlue">
                <TextBox Margin="5"></TextBox>
                <TextBox Margin="5"></TextBox>
                <TextBox Margin="5"></TextBox>
                <Button Content="OK" Margin="5"></Button>
            </StackPanel>
        </Grid>
    </Window>
    View Code

    再编写MainWindow:

    <Window x:Class="WpfApplication3.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfApplication3"
            WindowStartupLocation="CenterScreen"
            Title="MainWindow" Height="300" Width="300">
        <!--xmlns:local="clr-namespace:WpfApplication3"引入命名空间WpfApplication3,并映射为local-->
        <Grid>
            <StackPanel>
                <local:MyButton Content="Show" UserWindowType="{x:Type TypeName=local:MyWindow}" Margin="5"></local:MyButton>
            </StackPanel>
        </Grid>
    </Window>
    View Code

    2.x:Null

    显示地对一个属性赋一个空值

    例子:

    MainWindow:

    <Window x:Class="xNull.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="x:Null Sample" Height="300" Width="300">
        <Window.Resources>
            <Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
                <Setter Property="Width" Value="60"></Setter>
                <Setter Property="Height" Value="36"></Setter>
                <Setter Property="Margin" Value="5"></Setter>
            </Style><!--设置Button控件的默认Style-->
        </Window.Resources>
        <Grid>
            <StackPanel>
                <Button Content="0K"></Button>
                <Button Content="0K"></Button>
                <Button Content="0K"></Button>
                <Button Content="OK" Style="{x:Null}"></Button><!--显示地把Style设置为x:Null了-->
            </StackPanel>
        </Grid>
    </Window>
    View Code

    效果:

     

    3.标记扩展实例的两种声明语法

     上面的例子,可以写成:

    <Button Content="OK">
        <Button.Style>
            <x:Null />
        </Button.Style>
    </Button>

    这样写,代码显得有些啰嗦,所以为了保持简洁,很少使用这样的写法 

    4.x:Array

     x:Array的作用就是通过它的Items属性向使用者暴露一个类型已知的ArrayList实例,ArrayList内成员的类型由x:Array的Type指明

    例子:

    <Window x:Class="xArray.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            Title="MainWindow" Height="120" Width="160">
        <!--需要使用String,引入xmlns:sys="clr-namespace:System;assembly=mscorlib"-->
        <Grid>
            <Grid Background="LightBlue">
                <ListBox Margin="5" ItemsSource=“{x:Array Type=sys:String}”><!--类型为String-->
                </ListBox>
            </Grid>
        </Grid>
    </Window>
    View Code

    但如果这样写,是没有数据可以提供的,则改为标签声明语法:

    <Window x:Class="xArray.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            Title="MainWindow" Height="120" Width="160">
        <!--需要使用String,引入xmlns:sys="clr-namespace:System;assembly=mscorlib"-->
        <Grid>
            <Grid Background="LightBlue">
                <ListBox Margin="5">
                    <ListBox.ItemsSource>
                        <x:Array Type="sys:String"><!--类型为String-->
                            <sys:String>Tim</sys:String>
                            <sys:String>Tom</sys:String>
                            <sys:String>Victor</sys:String>
                        </x:Array>
                    </ListBox.ItemsSource>
                </ListBox>
            </Grid>
        </Grid>
    </Window>
    View Code

    结果为:

     5.x:Static

     在XAML文档中使用数据类型的Static成员

    例子:

    MainWindow.xaml.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace xStatic
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            public static string WindowTitle = "高山流水";
            public static string ShowText { get { return "水落石出"; } }
    
            public MainWindow()
            {
                InitializeComponent();
            }
        }
    }
    View Code

    MainWindow.xaml

    <Window x:Class="xStatic.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:xStatic"
            Title="{x:Static local:MainWindow.WindowTitle}" Height="120" Width="300">
        <!--把命名空间xStatic映射为local-->
        <!--使用x:Static访问静态成员数据-->
        <Grid>
            <StackPanel>
                <TextBox FontSize="32" Text="{x:Static local:MainWindow.ShowText}"></TextBox>
                <!--使用x:Static访问静态成员数据-->
            </StackPanel>
        </Grid>
    </Window>
    View Code

     结果:

    6.XAML指令元素

     XAML指令元素有两个:

    x:Code

    x:XData

    1)x:Code的作用是,放置一些本应该放在后置代码中的C#代码。一般不会这样做,这样做,会是代码难以维护、不易于调试

    2)x:XData是一个专用标签。如果想在XAML中声明一个带有数据的XmlDataProvider实例,那么XmlDataProvider实例的数据就应该放在x:Data标签的内容里,比如:

    <Window.Resources>
        <XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books">
            <x:XData>
                <Supermarket xmlns="">
                   <Fruits>
                      <Fruit Name="Peach"/>
                      <Fruit Name="Banana"/>
                      <Fruit Name="Orange"/>
                   </Fruits>
                   <Drinks>
                      <Drink Name="Coca Cola"/>
                      <Drink Name="PEPSI Cola"/>
                   </Drinks>
                </Supermarket>    
            </x:XData>
        </XmlDataProvider>
    </Window.Resources>
  • 相关阅读:
    DataGrid 应用合集
    [转]UBB C#完全版
    IE 7中的快捷键
    DataGrid 单击变色,鼠标经过变色 部分代码
    17种正则表达式
    单无格内强制换行
    图片上传,并自动生成缩略图!
    layout_weight学习心得
    android 手势
    java陷进一
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/3522398.html
Copyright © 2011-2022 走看看