WPF,标记扩展学不懂

u010153360 2013-04-06 09:43:06
XAML中的标记扩展简直学不懂,比如下面的代码
<StackPanel Background="{x:Static Brushes.AliceBlue}"/>

这段代码的意思是不是把Background设置为AliceBlue?那这样写的意义在哪里?



还有下面这段代码,
<Button Background="{x:Null}"
Height="{x:Static SystemParameters.IconHeight}"
Content="{Binding Path=Height, RelativeSource={RelativeSource Self}}" />

不要说花括号内是什么东西,那些我都知道,我只想知道这样使用标记扩展的意义在哪里?只针对这段代码说
...全文
350 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2013-04-07
  • 打赏
  • 举报
回复
引用 9 楼 u010153360 的回复:
我想问的是: <StackPanel Background="{x:Static Brushes.AliceBlue}"/> 是不是等同于 <StackPanel Background="Brushes.AliceBlue"/> 如果是的话,那为什么要写成那个格式的
当然是不等的,下面那种写法是非静态的,如果那样写,就意味着StackPanel必须有对应的DataContext设定,先将DataContext设定到某个对象实例后,然后查找该对象的Brushes属性,再查找AliceBlue属性。 而上面的写法则是意味着查找静态属性Brushes.AliceBlue,其中Brushes代表了类名而不是属性名,无需具体实例绑定到DataContext
  • 打赏
  • 举报
回复
引用 9 楼 u010153360 的回复:
引用 5 楼 u010153360 的回复:<StackPanel Background="{x:Static Brushes.AliceBlue}"/> 这段代码是啥意思,就说这个,请勿说废话 引用 6 楼 qldsrx 的回复:引用 5 楼 u010153360 的回复:<StackPanel Background="{x:Static Brushes.Ali……
你去微软总部静坐示威,抗议为什么要用这种风格。
u010153360 2013-04-07
  • 打赏
  • 举报
回复
引用 5 楼 u010153360 的回复:
<StackPanel Background="{x:Static Brushes.AliceBlue}"/> 这段代码是啥意思,就说这个,请勿说废话
引用 6 楼 qldsrx 的回复:
引用 5 楼 u010153360 的回复:<StackPanel Background="{x:Static Brushes.AliceBlue}"/> 这段代码是啥意思,就说这个,请勿说废话 你是要知道它的意义还是意思?意义和含义是不同的概念,我都被你搞糊涂了。
我想问的是: <StackPanel Background="{x:Static Brushes.AliceBlue}"/> 是不是等同于 <StackPanel Background="Brushes.AliceBlue"/> 如果是的话,那为什么要写成那个格式的
qldsrx 2013-04-07
  • 打赏
  • 举报
回复
XAML标记里面的所有设定,都是一个查找的过程,按照设定内容去查找。不同的标记查找的对象也不同,Static是查找静态,而没有Static关键字的就是动态,这好比访问一个静态类的时候不需要对象实例,但是访问一个非静态类时,必须初始化类的实例后才能访问,而对于XAML来说,需查找的对象实例的给定就是通过DataContext来实现的。 另外关于难易度,.NET里面就属WPF是最难学的,它完全摆脱了常规的拖放控件的编程思路,将界面设计和数据分离,通过绑定的方式提供给界面设计者对数据的控制。如果你没有一定的C#基础,肯定是学不好它的。 从难易度来说,控制台程序<WinForm<WebForm<WPF,这里没有把MVC、WCF等包含在内,因为它们并不和用户界面直接相关。
u010153360 2013-04-07
  • 打赏
  • 举报
回复
引用 11 楼 qldsrx 的回复:
引用 9 楼 u010153360 的回复:我想问的是: <StackPanel Background="{x:Static Brushes.AliceBlue}"/> 是不是等同于 <StackPanel Background="Brushes.AliceBlue"/> 如果是的话,那为什么要写成那个格式的 当然是不等的,下面那种写法是非静态的,如果那样写……
你说的,我简直看不懂,什么“必须有对应的DataContext设定”啊, 哎,XAML这么难学啊
  • 打赏
  • 举报
回复
整个xaml的意义就在于,可以让设计人员(而不是程序员)用说明性的方式来开发程序。 比如说,美工可以使用blend来开发非常复杂的程序,他们不需要编写一行代码也能做很多程序设计,那就拜xaml风格所赐才成为可能。
暖枫无敌 2013-04-06
  • 打赏
  • 举报
回复
更多扩展标记,请参考MSDN,很详细的 http://msdn.microsoft.com/zh-cn/library/ms742135.aspx
暖枫无敌 2013-04-06
  • 打赏
  • 举报
回复
楼主可以先去了解下WPF/Silverlight中的资源这个概念
devmiao 2013-04-06
  • 打赏
  • 举报
回复
不知道你想知道什么,什么对于你来说不是废话。我想你可能是问,为什么用xaml去定义一个界面。这样做的意义是什么。很显然,将用户界面元素的配置从代码移动到xaml中,好处是很多的,一个是,xaml的解析和操作,比直接处理源代码要容易,因为源代码可以夹杂更复杂的逻辑,因此为一个xaml脚本编写一个所见即所得的设计器要简单。另外,将界面从命令定义转化为声明式,更有利于美工的理解,以及跨语言的不同程序员的理解,对于一个以英语为母语的普通人来说,这样的描述都是简单易懂的。
qldsrx 2013-04-06
  • 打赏
  • 举报
回复
引用 5 楼 u010153360 的回复:
<StackPanel Background="{x:Static Brushes.AliceBlue}"/> 这段代码是啥意思,就说这个,请勿说废话
你是要知道它的意义还是意思?意义和含义是不同的概念,我都被你搞糊涂了。
u010153360 2013-04-06
  • 打赏
  • 举报
回复
<StackPanel Background="{x:Static Brushes.AliceBlue}"/> 这段代码是啥意思,就说这个,请勿说废话
三五月儿 2013-04-06
  • 打赏
  • 举报
回复
WPF应用之"标记扩展"延缓资源分配显示 http://news.ccidnet.com/art/32857/20100401/2025801_1.html

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧