use*_*375 45 c# wpf xaml code-behind
我不喜欢使用XAML.我更喜欢用C#编写所有代码,但我认为我做错了.
在哪些情况下,最好使用XAML,何时使用C#?你有什么经历?
Wil*_*ins 71
在C#中创建一个完整的窗口可能是一堆代码.WPF的最大优点是XAML允许您将设计与逻辑分离,从而使代码更容易阅读.
当我需要创建动态控件时,我将使用C#,但我倾向于在XAML中保留我的通用设计,静态故事板,样式,数据窗口等.
Dan*_*ker 14
XAML肯定会走得太远.那些想要在XAML中定义的整个用户界面(包括逻辑,事件处理关系等)的人可能会忽略这一点.
XAML的目的是提供一种通用格式来确定事物的外观.它应该只是描述如何布局,如何在视觉上着色和设计它们.
尝试使用它作为C#其他方面的替代品确实没什么意义,因为C#在编程特性方面具有永久性的先发优势 - 重用(定义类型和函数),引用变量,过程编程和甚至是陈述性或功能性风格.
我个人非常喜欢用Linq表达式组合UI!
最后的荒谬是通过我看到的样本达到的,他们使用工作流操作作为按钮的子代提供Click处理程序,因此整个程序在XAML中.这听起来很"酷",但问题是它比同等的C#或VB.NET程序更难看和难以理解,因此C#中准备使用的所有东西都必须被更冗长,更脆弱的等价物所取代.这种转换为更丑陋的语法实际上没有获得任何东西 - 它是同一个程序,只是更加可怕.XML是通用编程语言语法的不良基础.从大写符号必须写成的事实开始>!
在一个并行的世界中,微软在完成XAML之前发布了C#3.0.XAML团队采用C#3.0对象/列表初始化语法而不是XML作为语法.整个辩论从未发生过.
基本上,XAML用于表达视觉设计,C#用于表达逻辑.
任何视觉设计都应该在XAML中完成,任何逻辑都应该在C#中实现.
- 这使得设计师能够在不担心逻辑变化的情况下进行视觉设计,甚至可以在运行时使用松散XAML替换整个视觉设计.
- 这也意味着您可以替换逻辑或视觉设计而不会"破坏".
- 两者之间的连接应该通过数据绑定和命令绑定来完成.
我使用的做法是:
1.在单独的C#代码中定义模型(业务数据对象模型).
2.在XAML中定义视图的常量部分(图形用户界面的常量部分,例如窗口,菜单......)(最好使用Blend而不是VS).
*这里不要定义样式(颜色,字体......).
*不要在XAML后面的代码中为按钮编写事件处理程序(在大多数情况下),而是使用命令绑定.
3.使用位于不同文件中的XAML"ResourceDictionary"定义模型在视图中的显示方式(用于查看/编辑数据对象的GUI).
- 使用混合编写然后使用VS向XAML添加绑定(VS的Jetbrains'Resharper附加组件将帮助绑定表达式).
- 如果在设计时不知道对象类型,则可以使用"loose-XAML"并将XAML放在一个文件夹中,该文件夹可以在不重新编译的情况下添加/编辑文件.
4.在C#中
创建模型和视图(控制器/视图模型)之间的连接,其中:*根据需要创建视图(对于动态对象)
*数据 - 将视图绑定到模型(将视图的DataSource设置为相关对象)在模型中)
*实现命令
*命令 - 将视图绑定到自身内的命令实现
5.在Application.xaml中,删除StartupUri ="MainWindow.xaml"并添加Startup ="ApplicaitonStartUp".
在ApplicationStartUp()事件处理程序中:
*加载任何松散的XAML
*创建控制器
*创建主窗口
*创建模型
*将控制器连接到模型和主窗口
*显示主窗口
*(保存模型,控制器和主窗口在这里进入私人领域,以确保它们都保持活着)
6.在ResourceDictionary下为一个单独的XAML文件添加样式(颜色,字体)(使用混合为此或购买现成的XAML主题/皮肤文件).
想要用C#而不是XAML编写UI的冲动实际上只是表明你在XAML中的舒适度.
对我来说,个人目标是尽可能少地编写代码.简单地说,代码背后很难进行单元测试,但可以(并且通常会)包含未经过测试的逻辑.XAML是声明性的(如HTML)并且不包含任何逻辑,因此没有任何单元测试.我将我的视图代码保存在XAML中,并将我的视图逻辑保存在我的ViewModel(MVVM)中,这非常容易测试.
一旦你对XAML越来越熟悉,你就会越多地意识到它在程序代码中构建视图的好处......使用类似MVVM的模式,你更进一步,并意识到代码隐藏只在极少数情况下才有用.
| 归档时间: |
|
| 查看次数: |
23141 次 |
| 最近记录: |