精华内容
下载资源
问答
  • xml xaml 学习

    千次阅读 2008-11-03 13:32:00
    两只老虎--劳虎胭脂虎的杰作--无废话XMLXML语法领进门 encoding也是属性 -->tag: elements , attributes ,俗称的标签实际上包含了元素属性,属性后的属性值要用""括起来。Well-formed 格式要正确。xml很严格...

    两只老虎--劳虎和胭脂虎的杰作--无废话XML

    XML语法领进门

    <?xml version="1.0" encoding="GB2312" ?>   <!-- xml 声明,<? 是处理指令PI, version是属性 "GB2313"是属性值,

    encoding也是属性 -->

    tag:  elements , attributes ,俗称的标签实际上包含了元素和属性,属性后的属性值要用""括起来。

    Well-formed 格式要正确。xml很严格

    elements 要用/>关起来,必须是封闭的。

    标签之间不得交叉。

     

    有法可证的XML -- valid xml,用什么验证呢? DTD(document type defination) DTD定义出来的一套应用,专业术语叫语汇

    vocabulary

    大小写有区分

    奇特的数据区: <![CDATA[  ???????  ]]>

    空行空格都作数

    PI与样规链接

    <? ?> PI-  procession instruction 给解析器下游的程序用的,提供处理指示。

    <?xml-stylesheet href="style.css" type="text/css" ?> 这个标签提供了样规的链接和类型,样规是为xml提供格式用的。

     

    url : uniform resource locator

    uri: uniform resource identifier

    urn: uniform resource name

     

    命名空间, 命名空间前置字符串,预设的命名空间(没有前置字符串)

     

    XAML(读作zammel) 微软的东东,主要为WPF创建的标记语言

    XAML BASICS

    The xaml standard is quite straightforward once you understand a few ground rules:

    >Every element in a XAML document maps to an instance of a .net class, the name of the element matches the

    name of the class exactly.

    >As with any xaml ducument, you can nest one element inside another.As you will see,xaml gives every class the

    flexibility how it deal with this situation. however, nesting is usually a way to express containment.

    >you can set the properties of each class through attributes.

     

    1 <Window x:Class="WindowsApplication1.Window1"
    2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4 Title="Window1" Height="300" Width="300">
    5
    6 <Grid>
    7 </Grid>
    8 </Window>

     

    XAML名字空间:显然,仅仅提供一个类名是不够的,XAML解析器需要知道该类在.NET名字空间中的具体位置,也就是具体的名字空

    间。如果不指定名字空间,那么Window类既可以是System.Windows.Window类,又可以是第三方提供的一个组件的名字空间中的类

    ,也可以是你的应用程序中的一个类。瞧,第二行, xmlns,该属性是xml保留的一个属性名,用来定义名字空间,xmlns后面没有

    尾巴,表示它定义的是缺省空间"http://schemas.microsoft.com/winfx/2006/xaml/presentation",所以Window类的名字空间

    就是上述的名字空间。显然,xml的名字空间没有和某个特定的.NET 名字空间一致。这有几个原因,其一,XML的名字空间按照惯例

    采用URI--Uniform Resource Identifier. 其二,如果xml名字空间和.nethttp://writeblog.csdn.net/PostEdit.aspx?

    entryId=3210013名字空间一一对应,那么会使XAML文档很复杂,它将包含几十个名字空间--System.Windows下的所有名字空间。

    如果每个.net名字空间都对应一个XML名字空间,那么你每定义一个控件都需要在前面加上不同的名字空间,很快,XML变得杂乱了

    。WPF的创建者将这些.NET名字空间汇集到一个单一的XML名字空间。这样之所以可行,是因为.NET名字空间下的所有的WPF类(可能

    处于不同的子名字空间),它们的名字都没有重复。XML解析器看到了缺省的WPF空间下的Window和Grid,它将搜索.对应NET名字空

    间(所有WPF类),直到它搜到 System.Windows.Window 和 System.Windows.Controls.Grid.
    代码绑定的类:

    类名属性:Class

    1  <Window x:Class="WindowsApplication1.Window1"

    Class 前有一个x的前缀,表示类名是一个更上层的xaml名字空间--http://schemas.microsoft.com/winfx/2006/xaml

    Class属性告诉parser创建一个名叫Window1的类,该类从System.Windows.Window类派生出来。在编译时,Window1类自动产生。

    但是,一件有趣的事情发生了,你可以自己写一个Window1类,该类将与自动产生的类合并,你自己定义的类正是一个事件处理器。

    为什么呢?因为,C#语言有一个特征,叫作 partial classes,即部分类,用一个关键字partial就可以定义部分类,它允许一个类

    被分割成不同的部分,处在不同的文件中。

    special method--

    when xaml is compiled into code, there is a special method named InitializeComponent() in the class contructor

    of the corresponding class.

    it then calls another method named LoadComponent which is a method of System.Windows.Application.

    LoadComponent extract the BAXML from your assembly and uses it to build User Interface. As it parses BAXML, it

    creates controls, sets its properties, attaches any event handler.

    Name elements
    if you want to manipulate controls programmatically,then you should name it. when you name it, it will create

    a corresponding field in your class.
    6      <Grid x:Name="grid1">
    7      </Grid>
    the Name property shown above is part of the xaml language, and it is used to helo integrate your code-behind

    class.
    Somewhat confusingly, many classes define their own Name property. You can set either the XAML Name property

    or the Name property that belongs to the actual element(by leaving out the prefix):<Grid Name="grid1">
    </Grid> the result is the same. why this also works? because all FrameworkElement classes has a

    RuntimeNameProperty attribute which indicates which property should be treated as the name for instances of

    that type,obviouly, it is usually the property that is named Name.
    Properties and Events in XAML
    Simple properties and Type Converters
    the attributes of an element set the properties of the corresponding object. the question is that the value in

    an XAML attribute is always a plain text string, however, object properties can be any .NET type.
    so we need a type converter.
    the XAML parser follows two steps to find a type converter:
    1.it examines the property declaration, looking for a TypeConverter attribute.(if present, the TypeConverter

    attribute indicates what class can perform the conversion) For example, when you use a property such as

    Foreground, .NET checks the declaration of the Foreground property.先从属性(property)的声明中找TypeConverter

    属性(attribute),这里应该指在xaml中检查property的typeconverter的attribute.
    2.if there is no TypeConverter attribute on the property declaration, the XAML paser checks the class

    declaration of the corresponding data type,从.NET的类中找

    Complex Properties 复杂的properties有自己的properties.
    XAML的解决之道:定义一个子元素。(属性元素法property-element syntax)
    <Grid Name="grid1">
    <Grid.Background>
    ...  
    </Grid.Background>
    ...
    请注意,子元素的定义用了一个点符号“.”(period)。
    如何设置子元素的properties,答案是嵌套元素:
    <Grid Name="grid1">
    <Grid.Background>
    <LinearGradientBrush> <!--线形梯度画刷-->
    </LinearGradientBrush>
    </Grid.Background>
    ...
    </Grid>
    </Grid>
    你还需要设置线形梯度的驻点,同样线形梯度的驻点也较复杂,它可能有很多个,所以又定义了一个嵌套子元素。
    <Grid Name="grid1">
    <Grid.Background>
    <LinearGradientBrush>
    <LinearGradientBrush.GradientStops>
    <GradientStop Offset="0.00" Color="Red" />
    <GradientStop Offset="0.50" Color="Indigo" />
    <GradientStop Offset="1.00" Color="Violet" />
    </LinearGradientBrush.GradientStops>
    </LinearGradientBrush>
    </Grid.Background>
    ...
    </Grid>
    等价的c#代码
    LinearGradientBrush brush = new LinearGradientBrush();
    GradientStop gradientStop1 = new GradientStop();
    gradientStop1.Offset = 0;
    gradientStop1.Color = Colors.Red;
    brush.GradientStops.Add(gradientStop1);
    GradientStop gradientStop2 = new GradientStop();
    gradientStop2.Offset = 0.5;
    gradientStop2.Color = Colors.Indigo;
    brush.GradientStops.Add(gradientStop2);
    GradientStop gradientStop3 = new GradientStop();
    gradientStop3.Offset = 1;
    gradientStop3.Color = Colors.Violet;
    brush.GradientStops.Add(gradientStop3);
    grid1.Background = brush;

     

    瞧!<Button ... Foreground="{x:Static SystemColors.ActiveCaptionBrush}" >  (bracketed by curly braces.)
    这时扩展的标记法。当你需要:
    1.set a property value to an object that already exits.
    2.or you may want to set a property value dynamically,by binding it to a property in another control.

    The x:prefix indicates that the StaticExtension is found in one of the XAML namespaces. You'll also encounter markup extensions that are a part of the WPF namespaces and donot have the x:prefix.
    {MarkupExtensionClass Argument}. All markup extensions are implemented by classes that derive from System.Windows.Markup.MarkupExtension. The base MarkupExtension class is extremely simple - it provides a single ProvideValue() method that get the value you want.
    In other words, when the XAML parser encounters the previous statement, it creates an instance of the StaticExtension class(passing in the string "SystemColors.ActiveCaptionBrush" as an argument to the constructor) and then calls ProvideValue() to get the object returned by the SystemColors.ActiveCaption.Brush static property. The Foreground property of the cmdAnswer button is then set with the retrieved object.

    <TextBox ... Grid.Row="0">
    [Place question here.]
    </TextBox>
    看到了吧,什么是attached properties. Grid.Row就是附加的属性,一个控件放在一个网格中,就有了位置的属性,这个属性是附加的。attached property的格式: DefiningClass.PropertyName
    Attached properties aren't really properties at all. They're actually translated into method calls. The XAML parser calls the static method that has this form: DefiningType.SetPropertyName().

    When calling SetPropertyName(), when calling SetPropertyName(), the parser passes two parameters: the object that's being modified and the property value that's specified.

     

    附加的属性

    附加的属性使得控件可以放到容器中

    语法: DefiningType.PropertyName

    看起来属性是属于容器类的,其实不是,是属于控件自身.定义一个附加属性相当于调用了:DefiningType.SetPropertyName(),其实,这还不是真相,真相是:所有的wpf控件都从DependencyObject类派生的,定义一个附加属性其实是在调用 DependencyObject.SetValue(Grid.RowProperty,0) 附加属性是WPF的基本组成部分,它使得WPF控件组成了一个可扩展的系统。

     

    XAML允许每个元素自己来决定如何处理嵌套元素。this interaction is mediated through one of four mechanisms that are evaluated in this order:

    >if the parent implements IList, the parser calls IList.Add() and passes in the child.

    GradientStop gradientStop1 = new GradientStop();
    gradientStop1.Offset = 0;
    gradientStop1.Color = Colors.Red;
    IList list = brush.GradientStops;
    list.Add(gradientStop1);

    >if the parent implements IDictionary, the parser calls IDictionary.Add() and passes in the child

    >if the parent is decorated with the ContentProperty attribute, the parser uses the child to set that property.

    <Grid Name="grid1">
    ...
    <TextBox Name="txtQuestion" ... >
    ...
    </TextBox>
    <Button Name="cmdAnswer" ... >
    ... 
    </Button>
    <TextBox Name="txtAnswer" ... >
    ...
    </TextBox>
    </Grid>

     the Grid does support ContentProperty attribut, which indicates the property that should receive any  nested content. Technically, the ContentProperty attribute is applied to the Panel class, form which the Grid derives, and looks like this :

    [ContentPropertyAttribute("Children")]

    public abstract classPanel

    this indicatess that any nested elements should be used to set the Children property. The XAML parser treats the content property differently depending on whether or not it is a collection property.Because the Panel.Children property returns a UIElementCollection, and because UIElementCollection implements IList, the parser uses the IList.Add() method to add nested cotent to the grid.

     

    txtQuestion = new TextBox();
    ...
    grid1.Children.Add(txtQuestion);
    cmdAnswer = new Button();
    ...
    grid1.Children.Add(cmdAnswer);
    txtAnswer = new TextBox();
    ...
    grid1.Children.Add(txtAnswer);

     

    接下去事情如何发生要看控件是如何实现内容属性的(ContentProperty), 这里,Grid 将在指定的行列中显示所有的子控件。

    内容属性在WPF中是常用的,不仅仅因为它可以用作容器来包含一组可视的项目,而且还可以用于包含单个的内容。比如TextBox和Button只包含了单个的元素或者说文字。The TextBox class uses the ContentProperty attribute to flag the TextBox.Text property.The Button class uses the ContentProperty attribute to flag the Button。The XAML parser uses the supplied text to set these properties.内容属性(ConetenProperty)可以接受任何的元素呢。但是因为文字和内容属性都没有使用集合,所以你不能包含多个元素在"按钮"中。否则,XAML解析器将抛出一个异常。

     As a general rule of thumb, all controls that derive from ContentControl allow a single nested element. All controls that derive from ItemsControl allow a collection of items that map to some part of the control (such as a list of items or a tree of nodes). All controls that derive from Panel are containers that are used to organize groups of controls. The ContentControl, ItemsControl, and Panel base classes all use the ContentProperty attribute.

     

    展开全文
  • 我有一个xml文件 其中定义了 <?xml version="1.0" encoding="utf-8" ?> <colors xmlns=""> <colora>...我在xaml中进行了数据绑定 如下<Slider Maximum="255" Minim...

    我有一个xml文件 其中定义了

    <?xml version="1.0" encoding="utf-8" ?>
    
    <colors xmlns="">
    
    	<colora>233</colora>
    
    </colors>
    

    我在xaml中进行了数据绑定 如下
    <Slider Maximum="255" Minimum="0" Value="{Binding Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, XPath=/colors/colora}" x:Name="ColorSliderA"/>

    绑定是双向的并且也定义了在属性更改时更新数据源 但是 我移动slider时,数据源的值并不会变 请问要如何做才能让xml中的数据源值改变

    -->你得data是在xml里的 我的需要他在一个xml文件中 上面是文件 按你上面的改成这样xml文件还是不会在silder改变的时候 文件自动更新喔!
    对XML文件的binding我们要注意一点,就是在运行时,我们对XML数据的任何更改都是在内存中进行的,也就是说这个是临时的,这个更改结果是临时反映在内存中的,如果我们不手动保存到本地硬盘的话,程序一退出,所有的改动都不会自动保存(即使你设置了TwoWay binding).
    在这个例子中,我们可以像下面这样保存结果(所有的改动都完成后):

    XmlDataProvider xml = this.Resources["xmlData"] as XmlDataProvider;
    xml.Document.Save("D:/temp.xml");
    如果你原先的XML文件路径是D:/temp.xml,在保存的时候,你可以设成一样,这样新文件就会更换原来的文件了.

    -->另外我还想问 如果我上面的文件color那行有多个 是否可以条件绑定到一条上
    你可以使用multi value converter,对多个数据进行处理后,再返回一个合适的值。
    这是一个关于IMultiValueConverter的MSDN的文档
    http://msdn.microsoft.com/en-us/library/system.windows.data.imultivalueconverter.aspx

     

    我想在程序运行时实时显示硬盘上的xml的内容,例如用textblock 显示传感器采集得到的xml数据

    我将xml作为xmldataprovider,将textblock.text 和xml内的数据进行了绑定

    现在遇到的问题是程序在运行开始时读取了xml内的数据,运行时xml数据改变了,但程序内的显示未发生改变。


    我看到在回答问题 “实现xml和xaml数据双向绑定的问题”时 版主提到了

    “在运行时,我们对XML数据的任何更改都是在内存中进行的,也就是说这个是临时的,这个更改结果是临时反映在内存中的,如果我们不手动保存到本地硬盘的话,程序一退出,所有的改动都不会自动保存(即使你设置了TwoWay binding).”

    我遇到的情况也是这个原因吗? 应该怎么解决呢?

    关键:

    public MainWindow()
            {
                InitializeComponent();
    
                XmlDataProvider xml = FindResource("xmlFromFile") as XmlDataProvider;
                System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
                xmldoc.Load("People.xml");
                xml.Source = new Uri(AppDomain.CurrentDomain.BaseDirectory + @"/People.xml", UriKind.RelativeOrAbsolute);
    
                FileSystemWatcher watcher = new FileSystemWatcher();
                watcher.Path = AppDomain.CurrentDomain.BaseDirectory;
                watcher.Changed += new FileSystemEventHandler(watcher_Changed);     
                watcher.EnableRaisingEvents = true;
    
            }
    
            void watcher_Changed(object sender, FileSystemEventArgs e)
            {
                Thread.Sleep(100);
                XmlDataProvider xml = FindResource("xmlFromFile") as XmlDataProvider;
                xml.Refresh();
            }

    参考例子下载:http://cid-51b2fdd068799d15.office.live.com/self.aspx/.Public/Samples%5E_2011/20110329%5E_FileSystemNotifyWPFXMLBinding.zip

    转载于:https://www.cnblogs.com/wangchunming/archive/2012/08/14/2638091.html

    展开全文
  • XML&XAML基础教程

    2010-05-05 13:21:54
    XML&XAML基础教程,帮你理解 XML XAML 概念 概述 语法
  • XML&XAML 理解

    2015-04-18 05:56:43
    XML XAML Makeup Language declarative application language web applications design controls for windows & web applications     discribe other makeup language object ...

    XMLXAML
    Makeup Languagedeclarative application language
    web applicationsdesign controls for windows & web applications
      
    discribe other makeup languageobject definition
    replace html because of its flexibilityonly for windows platform by now, like silverlight
    create interactive page;
    automate certain web tasks;
    search
    create, edit and reuse GUIs for Windows 
      
      
      

    展开全文
  • xmlxaml有什么区别

    2019-10-01 05:32:54
    XAMLXML的一种,用着WPF中 XAML除了有标记语言、XML的优点外,还有如下一些优点: 用XAML设计UI更简单 XAML比其他的UI设计技术所需编码更少。 XAML设计的UI方便转移、方便在其他环境提交。比如在...
    
    XAML是XML的一种,用着WPF中
    
    XAML除了有标记语言、XML的优点外,还有如下一些优点: 
    
    用XAML设计UI更简单 
    
    XAML比其他的UI设计技术所需编码更少。 
    
    XAML设计的UI方便转移、方便在其他环境提交。比如在Web或Windows Client。 
    
    用XAML设计动态UI非常容易 
    
    XAML给UI设计人员带来新的革命,现在所有的设计人员不再需要.NET开发的知识同样可以设计UI。在不远的将来,终端用户可以看到更漂亮的UI。 

    转载于:https://www.cnblogs.com/I-am-Betty/archive/2011/03/03/1970053.html

    展开全文
  • XML vs XAML XML, or Extensible Markup Language, is a subset of the more complex SGML (Standard Generalized Markup Language). XML makes use of syntax tags that helps to identify the variousdata
  • XML, or Extensible Markup Language, is a subset of the more complex SGML (Standard Generalized Markup Language). XML makes use of syntax tags that helps to identify the various data types in a file...
  • 但是这些方式在读写有些带命名空间的xml时就不知道怎么办了(例如把xaml文件当作xml文件来读写的时候)。 对于xaml文件,C#虽然能用XamlReader直接把xaml文件转换为对象,但是有的时候我们只是想取得其中一些字段,...
  • XML 字符实体 XAML

    2010-11-01 11:23:00
    正如上面所提到的那样,在编写 XAML 标记时经常用到的大部分字符实体转义都是由 XML 定义的。本主题不提供类似实体的完整列表;对于这些实体的更具确定性的参考可以在外部文档(如 XML 规范)中找到。但是,为方便...
  • C# 中XML XAML WPF的学习

    2017-12-22 08:49:30
    WPF:Windows Presentation F XAML:Extensible Application Markup Language XAML文档定义了WPF应用...XML:指可扩展标记语言(Extensible Markup Language),XML被设计为传输存储数据,其焦点是数据的外观。 VS添加
  • XAMLXML的区别

    2020-12-11 09:12:51
    XAMLXML的一种,用着WPF中 XAML除了有标记语言、XML的优点外,还有如下一些优点: 用XAML设计UI更简单 XAML比其他的UI设计技术所需编码更少。 XAML设计的UI方便转移、方便在其他环境提交。比如在Web或Windows ...
  • WPF XAML绑定xml

    千次阅读 2014-05-04 20:25:06
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xml
  • 基于XML的界面资源标记语言,允许用户使用XML技术,将界面元素(例如对话框,菜单,工具条等等)以及相关信息写入XML资源文件中,在程序运行时,动态载入。从而赋予了应用程序更为强大的界面处理能力。采用基于XML的...
  • 4.XAML 简述 微软的XAML是进入XML-GUI竞争的新成员,由于微软对自己产品技术的强力宣传,还是立即引起了众多的注意评论。 由于微软的Longhorn要等到2006年才发布,因此XAML也许会在此期间发生比较大的改动。 XAML...
  • 4.XAML 简述 微软的XAML是进入XML-GUI竞争的新成员,由于微软对自己产品技术的强力宣传,还是立即引起了众多的注意评论。 由于微软的Longhorn要等到2006年才发布,因此XAML也许会在此期间发生比较大的改动。 XAML...
  • xaml 和xamlon

    2007-02-08 16:11:00
    xaml 大家都知道了,只是能正式使用它还遥遥无期,xamlon则是一个第三方的解决方案,在.net 1.1上,提供了类似xaml 的功能。Xamlon is XAML for Windows.Forms,是其在...xaml最简单的实现,其实就是读入xml文件,依
  • XAML

    千次阅读 2018-10-30 21:30:49
    指定XAML命名空间的技术依赖于XML命名空间语法,使用URI作为命名空间标识符的约定,使用前缀提供从同一标记源引用多个命名空间的方法,等等.XML命名空间被添加到XAML定义主要概念是,XAML命名空间游戏所有既。...
  • 采用基于XML的界面标记语言,开发者可以获得如下的好处: 当资源改变的时候,无需重新编译链接应用程序 将资源代码分开的策略,使程序的设计开发更具灵活性 在运行时,可以动态地改变资源文件,
  • 采用基于XML的界面标记语言,开发者可以获得如下的好处: 当资源改变的时候,无需重新编译链接应用程序 将资源代码分开的策略,使程序的设计开发更具灵活性 在运行时,可以动态地改变资源文件,从而改
  • xaml

    2017-02-28 08:06:00
    winform 时代,每个空间都是使用后台代码生成,wpf页面显示使用xml实现(但是也可以后台代码),这样解决了开发人员设计人员协作开发的问题。 3.xaml变体应用 wpf xaml xps xaml silverlight xam...
  • WPF和XAML

    千次阅读 2012-06-11 16:50:14
    WPF(Windows Presentation Foundation)是微软新一代图形系统的,运行在.NET Framework 3.0 架构下,为用户界面、2D/3D 图形、文档媒体提供了统一的描述操作方法。基于DirectX9/10技术的WPF不仅带来了前所未有的...
  • WPF和XAML基础

    千次阅读 2014-01-01 21:24:40
    那么到了WPF,其实这些声明界面的工作都在一个XML文件中完成,这个XML文件其实就是XAML。  那么什么是XMAL?主要用于构造WPF的界面,用什么构造,其实还是用控件构建,只是这些控件的构造以声明性的方式开始,而...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,150
精华内容 6,460
关键字:

xml和xaml