嗯,我必须承认,有时XAML对我来说似乎有点神秘。问题是,我总是喜欢通过C#代码调试(在其中设置大量断点)来了解“正在发生的事情”和“它是如何发生的”。但是使用声明式XAML语法不是一种选择。我认为您同意使用XAML,或者确切地说,使用/了解一些现有的XAML代码,您必须“已经知道”XAML声明的工作原理。您无法了解/了解调查应用程序代码执行情况的事情。因此,我更感兴趣的是尽可能详细地从内到外看看XAML。我不是在谈论“学习”XAML,我知道基本的东西。也许我可以提供一些例子来澄清我正在寻找的东西 -
<DataTemplate DataType="{x:Type viewmodels:AccountsViewModel}">
<views:Accounts/>
</DataTemplate>
因此,如果您是XAML的优秀/经验/专家,您会建议什么(链接,文章,博客,书籍等)作为参考,以帮助清楚和&amp;更深入地了解XAML如何在“引擎盖下”工作?提前谢谢。
答案 0 :(得分:4)
大多数可以解释为不要将XAML视为真正的编程语言,更像是声明性语言。你在xaml中所做的一切,都可以用C#制作,事实上这是最新的事情。
与C#代码相比,在我们使用它们时如何实例化对象 在XMAL?它们是否存储在托管堆中?与C#相同 代码实例化的对象?
是的,因为它们只是c#对象。大多数资源都存储在休眠状态,我记得某个地方充斥着这个词。转换器或其他&#34;直接&#34; c#对象在需要时创建。这里重要的是这些资源通常是共享的,因此它们只会被创建一次。
使用Mark-Up Extension语法进行数据/命令绑定时如何设置属性?
这又取决于您使用标记扩展的位置。风格?在模板中?在像窗口一样的实例化用户控件中?通常在实际需要时对它们进行评估。当膨胀的样式存储在实际的资源字典中时,评估它们是没有意义的。当您在对象上实际使用该样式时,它们会被评估。
当INotifyPropertyChanged类型的任何属性更新时,如何更新 XAML语法中的Binding instatnce会更新自身吗?怎么样 确切地说,它在第一时间被通知,&amp;由谁?
通过绑定引擎。 WPF检查您的DataContext是否继承了INotifyPropertyChanged接口,附加到接口提供的事件并侦听任何更改。如果引发了这样的事件,绑定引擎将再次调用getter。
实际上怎么样?设置DataContext的规则是什么 除了向上搜索DataContext属性 逻辑树?
简而言之:没有其他。 Datacontext只是一个继承的附加属性。如果您没有在子控件上设置它,它将获取父级所具有的值,直到它到达根目录。唯一的例外是ContentControls
和ContentPresenter
他们不会继承DataContext,但会根据内容更改它们。因此,这些控件默认情况下始终将Content作为其DataContext。
如何在运行时处理/解析整个模板事物(DataTemplate,ControlTemplate&amp; ItemsPanelTemplate)。
简单地说:每当WPF找到一个非ui对象时,它会尝试为给定类型找到一个DataTemplate。例如,在ItemsControl中:您可以绑定MyClass
的列表;除非您提供显式的DataTemplate或DataTemplateSelector,否则它将向上搜索资源树以获取隐式样式。再次记住,这已经不会发生在XAML中,而是发生在xaml生成的C#对象上。
是否可以通过任何方式(目前或将来)进行调试 通过XAML代码?
您认为如何调试未执行但在编译时评估的内容?
请不要将此视为100%正确。多年来,这就是我收集的有关XAML及其用法的信息。如果您有任何更正或发现明显错误的事情。请告诉我,我们都在这里学习,我总是学习有关我使用的东西的新内容:)