zoukankan      html  css  js  c++  java
  • 2.6 wpf标记扩展

    1.什么是标记扩展?为什么要有标记扩展?

    标记扩展是扩展xmal的表达能力

    为了克服现存的类型转换机制存在的

    常用的标记扩展有如下:

    x:Array 代表一个.net数组,它的子元素都是数组元素.它必须和x:Type一起使用,用于定义数组类型

    x:null 表示空引用

    x:static 在过程式代码中定义的任何一个静态属性、常量和枚举

    x:type 表示system.Type的一个实例,就像C#中的typeof

    注:标记扩展是有Extension的,可以省略不写

    标记扩展的语法是 Attribute={} 是花括号

    1.staticExtension

    <StackPanel Background="{x:Static Brushes.AliceBlue}" />

    2.ArrayExtension StaticResourceExtension

    <Window.Resources>
            <x:ArrayExtension x:Key="listitemboxs" Type="TextBlock">
                <TextBlock Text=" one"></TextBlock>
                <TextBlock Text=" two"></TextBlock>
                <TextBlock Text=" three"></TextBlock>
            </x:ArrayExtension>
    </Window.Resources>
    <StackPanel>
             <ListBox ItemsSource="{StaticResourceExtension listitemboxs}"></ListBox>
    </StackPanel>

    <Window x:Class="WpfApplication1.Window3"
            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="Window3" Height="300" Width="300" WindowStartupLocation="CenterScreen">    
        <Window.Resources>
            <sys:String x:Key="stringHell0">Hello WPF</sys:String>
        </Window.Resources>
        <Grid>
            <TextBlock Height="24" Width="100" Text="{StaticResource ResourceKey=stringHell0}"></TextBlock>
        </Grid>
    </Window>

    3.NullExtension

    <StackPanel Background="{x:NullExtension}"/>

    4.标记扩展有2种使用方式

    <StackPanel Background="{x:NullExtension}"/>

    <StackPanel>
            <StackPanel.Background>
                <x:Static Member="Brushes.AliceBlue"></x:Static>
            </StackPanel.Background>
     </StackPanel>

    以上两种方式显示得到一样的效果,但他们的内部实现机制是不一样的

    第一种:

    1. StaticExtension staticExtension = new StaticExtension("Brushes.AliceBlue");  
    2. StackPanel stackPanel = new StackPanel();      
    3. stackPanel.Background = staticExtension.ProvideValue(serviceProvider) as Brush;  
    4. AddChild(stackPanel);  

    第二种:

    1. StaticExtension staticExtension = new StaticExtension();  
    2. staticExtension.Member = "Brushes.AliceBlue";  
    3. StackPanel stackPanel = new StackPanel();      
    4. stackPanel.Background = staticExtension.ProvideValue(serviceProvider) as Brush;  
    5. AddChild(stackPanel); 

    这两种使用方式是一样的。但它们的内部实现机制却不同,Xaml解析器解析成的伪代码分别为:

    第一种:

    1. StaticExtension staticExtension = new StaticExtension("Brushes.AliceBlue");  
    2. StackPanel stackPanel = new StackPanel();      
    3. stackPanel.Background = staticExtension.ProvideValue(serviceProvider) as Brush;  
    4. AddChild(stackPanel); 

    第二种:

    1. StaticExtension staticExtension = new StaticExtension();  
    2. staticExtension.Member = "Brushes.AliceBlue";  
    3. StackPanel stackPanel = new StackPanel();      
    4. stackPanel.Background = staticExtension.ProvideValue(serviceProvider) as Brush;  
    5. AddChild(stackPanel); 

     实战 :拖动slider,textblock里的值变化

    2.6 <wbr>wpf标记扩展

      <Grid Margin="4">
            <Grid.RowDefinitions>
                <RowDefinition Height="24"></RowDefinition>
                <RowDefinition Height="4"></RowDefinition>
                <RowDefinition Height="24"></RowDefinition>
            </Grid.RowDefinitions>总共有3行row
            <TextBlock x:Name="tb" Background="White" Text="{Binding ElementName=sid,Path=Value}"></TextBlock>
            <Slider Name="sid" Grid.Row="2" Value="50" Maximum="100" Minimum="0"></Slider>这里的Grid.Rows是指显示在Grid里的第2行
        </Grid>

    注:绿色表示没看明白,日后要修改注的

  • 相关阅读:
    ubuntu,day1基础命令,shutdown,man,touch,rm,mv,cp,stat,locale,apt,date,tzselect,cal,快捷方式,echo,查看文件
    day 7 编码
    NO.6 appium-网络设置
    NO.5 appium-滑动和点击
    NO.4 appium-定位
    NO.3 appium-退出/启动
    NO.2 appium-安装和卸载
    NO.1 appium-关于输入法
    Springboot框架搭建
    遍历Map的四种方法
  • 原文地址:https://www.cnblogs.com/meimao5211/p/3374207.html
Copyright © 2011-2022 走看看