zoukankan      html  css  js  c++  java
  • WPF中的x命名空间

    1 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    x是用来解析XAML的库,用来将XAML进行编译生成CLR语言。

    我们新建一个工程,默认如下:

    1 <Window x:Class="WpfApplication4.MainWindow"
    2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4         Title="MainWindow" Height="350" Width="525">
    5     <Grid>
    6         <TextBlock Name="textblock" Text="textblock"/>
    7         
    8     </Grid>
    9 </Window>
     1 namespace WpfApplication4
     2 {
     3     /// <summary>
     4     /// MainWindow.xaml 的交互逻辑
     5     /// </summary>
     6     public partial class MainWindow : Window
     7     {
     8         public MainWindow()
     9         {
    10             InitializeComponent();
    11         }
    12     }
    13 }

    x:class

    1 x:Class="WpfApplication4.MainWindow"

    这个属性简单的说就是用来连接cs文件和XAML文件的,试想编译器怎么知道我当前的XAML重的内容是对应到哪一个类呢?就是通过这个属性。

    如果我将属性的值由MainWindow修改为MainWindow123,那么编译器会把这两个文件分别生成两个类:MainWindow和MainWindow123。

    x:FieldModifier

    1     <Grid>
    2         <TextBlock Name="textblock" Text="textblock"/>
    3         
    4     </Grid>

    这个时候textblock是私有的,但是有些时候,我们需要在外部获取到这个textblock。就需要使用到x:FieldModifier。

    1     <Grid>
    2         <TextBlock Name="textblock" Text="textblock" x:FieldModifier="public"/>
    3         
    4     </Grid>

    这个时候textblock就是公有的了这一点我们可以在MainWindow.g.i.cs文件中看到

    1         #line 6 "..\..\MainWindow.xaml"
    2         [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
    3         public System.Windows.Controls.TextBlock textblock;
    4         
    5         #line default
    6         #line hidden

    而在默认状态下,这个类是private的。

    同样与之有相同作用的还有x:ClassModifier,类必须有x:class这个是属性才会有x:ClassModifier,也就是说工程中的主窗口可以使用x:ClassModifier将其公开。

    x:Name

    Name大家是很熟悉的了,x:Name得作用和Name一样,都是用来定义一个类的实例名字,但是为什么有的使用Name有的却需要x:Name呢?

    那是因为Name这个属性定义在FrameworkElement中,但是有些类不是从这个类继承出来的,所以没有Name属性,这样就需要x:Name。一般情况下二者是可以混用的。

    x:Key

    将textblock的内容转成一个资源

    1     <Window.Resources>
    2         <System:String x:Key="String1">textblock</System:String>
    3     </Window.Resources>
    4     <Grid>
    5         <TextBlock x:Name="textblock" Text="{DynamicResource String1}"/>
    6     </Grid>
    x:Key就是这个资源的名字

    同样的和还有x:share,如果这个值等于true那么就相当于一个这个资源全局只有一份,但是如果这个资源为false,那么在使用的时候,就相当于重新创建了一个副本。


  • 相关阅读:
    DNN 4.9补丁
    15款经典图表软件推荐 创建最漂亮的图表
    在.NET使用JSON作为数据交换格式
    JQuery 动态删除
    在ASP.NET中使用Highcharts js图表
    一个比较好的工具网站
    DataTable与实体类互相转换
    第一次写JQuery页面
    一个代码查询网址
    NioEventLoop
  • 原文地址:https://www.cnblogs.com/HighFun/p/2855387.html
Copyright © 2011-2022 走看看