求大神帮画个图说明下.NET、C#、WPF三者之间的关系...谢谢

呼叫等待2023-04-23  14

C#就其本身而言只是一种语言,尽管它是用于生成面向NET环境的代码,但它本身不是NET的一部分。NET支持的一些特性,C#并不支持。而C#语言支持的另一些特性,NET却不支持(例如运算符重载)!

WPF则是微软准备代替C#NET中Forms编程方式的一种全新编程方式,其方式就是前台采用XAML控制布局,后台可以用C#,VB,C++等来相应,相当于前面用XAML写了个控件,而其控制逻辑指引到后台的函数逻辑中,而C#就是编写逻辑的支持语言之一。

WPF(Windows Presentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于。NET Framework 30的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。

程序人员与设计完全的明确的分工,美工人员您可以使用Expression Studio中套装工具可视化的设计界面。然后交给程序开发组中的XAML就可以。让程序人员直接套用到开发环境,不需要想页面怎么切了。对 与WPF最重要的特色,矢量图的超强支持 。兼容支持2D绘图,比如矩形、自定义路径,位图等。文字显示的增强,XPS和消锯齿。三维强大的支持。包括3D控件及事件,与2D及视频合并打造更立 体效果。渐变、使用高精确的(ARGP)颜色,支持浮点类型的像素坐标。这些对GDI+远远不及的。灵活、易括展的动画机制!Net Framework 30类库提供了强大的基类,只需继承就可以实现自定义程序使用绘制。接口设计非常直观,完全面向对象的对象模型。使用对象描述语言XAML。使用开发工具的可视化编辑。您可以使有任何一种Net编程语言(C#,VB NET等开发语言)进行开发。XAML主要针对界面的可视化控件描述,成生进会分析成cs或vb文件,并最后将编译为CLR中间运行语言

WPF:桌面应用程序和浏览器应用程序的融合,根据ms的承诺,正在开发中的WPF/E,即WPF Everywhere版本,将为基于WPF的应用程序提供全面的浏览器支持,这意味着未来开发出的应用程序将可以基于浏览器在不同的操作系统上运行,根据WPF/E开发组的定义,WPF/E仍然是WPF的子集,而不是后继版本。总体而言,WPF的前景应该是一片光明。

Visual Studio 提供了高级开发工具、调试功能、数据库功能和创新功能,帮助在各种平台上快速创建当前最先进的应用程序。

可以说各有各的好处,Visual Studio 工具范围比较广

从程序上讲,都以事件的形式调用处理。

winform开发上比WPF稍容易点,但整体上说其实没多大区别。

WPF基于directX,所以对于3D的处理更好,画面也更加酷炫。

winform的画面设计采用与开发语言相同的语言实现,并保存在相同的代码类型文件中,移植性不好。WPF的画面采用XML形式书写,保存在xml中,移植性更好,也更直观易懂。

另有一点细微差别,就是winform的控件可以叠放,如两个button的坐标可以完全一样,只能看到上面的一个。而WPF的控件不能叠放,所以如果有两个button位置相同,你必须要隐藏一个,否则两个都会被看到。

Windows Presentation Foundation (WPF) 中的大部分类都从四个类派生而来 这四个类在 SDK 文档中常常被称为基元素类 这些类包括 UIElement FrameworkElement ContentElement 和 FrameworkContentElement DependencyObject 也是一个相关类 因为它是 UIElement 和 ContentElement 的通用基类

WPF 类中的基元素 APIUIElement 和 ContentElement 都是从 DependencyObject 派生而来 但途径略有不同 此级别上的拆分涉及到 UIElement 或 ContentElement 如何在用户界面上使用 以及它们在应用程序起到什么作用 UIElement 在其类层次结构中也有 Visual 该类为 Windows Presentation Foundation (WPF) 公开较低级别的图形支持 Visual 通过定义独立的矩形屏幕区域来提供呈现框架 实际上 UIElement 适用于支持大型数据模型的元素 这些元素用于在可以称为矩形屏幕区域的区域内进行呈现和布局 在该区域内 内容模型特意设置得更加开放 以允许不同的元素进行组合 ContentElement 不是从 Visual 派生的 它的模型由其他对象(例如 阅读器或查看器 用来解释元素并生成完整的 Visual 供 Windows Presentation Foundation (WPF) 使用)来使用 ContentElement 某些 UIElement 类可用作内容宿主 它们为一个或多个 ContentElement 类(如 DocumentViewer)提供宿主和呈现 ContentElement 用作以下元素的基类 所具有的对象模型较小 并且多用于寻址可能宿主在 UIElement 中的文本 信息或文档内容

框架级和核心级UIElement 用作 FrameworkElement 的基类 ContentElement 用作 FrameworkContentElement 的基类 对于此下一级类 原因是要支持与 WPF 框架级相分离的 WPF 核心级 这种分离还存在于 API 如何在 PresentationCore 和 PresentationFramework 程序集之间进行划分 WPF 框架级为基本应用程序需要提供了一个更完整的解决方案 包括用于表示的布局管理器的实现 WPF 核心级提供了一种方法 以充分利用 WPF 而又不至于产生附加程序集开销 对于大多数典型的应用程序开发方案而言 这些级别之间的区别很少有影响 而且一般情况下应将 WPF API 视为一个整体 而无需担心 WPF 框架级与 WPF 核心级之间有何区别 如果您的应用程序设计选择替换大量 WPF 框架级功能 例如 如果您的整体解决方案已经有其自己的用户界面 (UI) 组合和布局实现 则可能需要了解级别之间的差异

选择从哪个元素派生创建用于扩展 WPF 的自定义类的最实用方法是从某个 WPF 类中派生 这样您可以通过现有的类层次结构获得尽可能多的所需功能 本节列出了三个最重要的元素类附带的功能 以帮助您决定要从哪个类进行派生

如果您要实现控件(这的确是从 WPF 类派生的更常见的原因之一) 您可能需要从以下类中派生 实际控件 控件系列基类或至少是 Control 基类

如果您不是创建控件 并且需要从层次结构中较高的类进行派生

则可以参考下列各节的内容 了解每个基元素类定义了哪些特征

如果您创建从 DependencyObject 派生的类 则将继承以下功能

GetValue 和 SetValue 支持以及一般的属性系统支持

使用依赖项属性以及作为依赖项属性实现的附加属性的能力

如果您创建从 UIElement 派生的类 则除了能够继承 DependencyObject 提供的功能外 还将继承以下功能

对动画属性值的基本支持

对基本输入事件和命令的支持

可以重写以便为布局系统提供信息的虚方法

如果您创建从 FrameworkElement 派生的类 则除了能够继承 UIElement 提供的功能外 还将继承以下功能

对样式设置和演示图板的支持

对数据绑定的支持

对动态资源引用的支持

对属性值继承以及元数据中有助于向框架服务报告属性的相关情况(如数据绑定 样式或布局的框架实现)的其他标志的支持

逻辑树的概念

对布局系统的实际 WPF 框架级实现的支持 包括 OnPropertyChanged 重写(该重写可以检测到影响布局的属性更改)

如果您创建从 ContentElement 派生的类 则除了能够继承 DependencyObject 提供的功能外 还将继承以下功能

对动画的支持

对基本输入事件和命令的支持

如果您创建从 FrameworkContentElement 派生的类 则除了能够继承 ContentElement 提供的功能外 还将获得以下功能

对样式设置和演示图板的支持

对数据绑定的支持

对动态资源引用的支持

对属性值继承以及元数据中有助于向框架服务报告属性情况(如数据绑定 样式或布局的框架实现)的其他标志的支持

您不会继承对布局系统修改(如 ArrangeOverride)的访问权限 布局系统实现只在 FrameworkElement 上提供 但是 您会继承 OnPropertyChanged 重写(可以检测影响布局的属性更改并将这些更改报告给任何内容宿主)

记录了各种类的内容模型 如果您要找到一个合适的类以便从该类进行派生 其内容模型是一个应该考虑的可能因素

其他基类

DispatcherObjectDispatcherObject 为 WPF 线程模型提供支持 并允许为 WPF 应用程序创建的所有对象与 Dispatcher 相关联 即使您不从 UIElement DependencyObject 或 Visual 派生 也应考虑从 DispatcherObject 派生 以获得此线程模型支持

VisualVisual 实现二维对象在近似矩形的区域中通常需要具有可视化表示的概念 Visual 的实际呈现发生在其他类中(不是独立的) 但是 Visual 类提供了一个由各种级别的呈现处理使用的已知类型 Visual 实现命中测试 但它不公开报告命中测试结果的事件(这些都位于 UIElement 中)

FreezableFreezable 通过在出于性能原因需要不可变对象时提供为对象生成副本的途径 来模拟可变对象的不变性 Freezable 类型为某些图形元素(如几何形状 画笔以及动画)提供了一个通用的基础 值得注意的是 Freezable 不是一个 Visual 当应用 Freezable 以填充另一个对象的属性值时 它包含的属性将变成子属性 而这些子属性可能会影响呈现

AnimatableAnimatable 是一个 Freezable 派生类 它特别添加了动画控件层和某些实用工具成员 从而使当前动画的属性可以与未动画的属性区分开

lishixinzhi/Article/program/ASP/201311/21854

Windows Presentation Foundation (WPF) 提供了一组服务 这些服务可用于扩展公共语言运行库 (CLR) 属性的功能 这些服务通常统称为 WPF 属性系统 由 WPF 属性系统支持的属性称为依赖项属性 本概述介绍 WPF 属性系统以及依赖项属性的功能 这包括如何在可扩展应用程序标记语言 (XAML) 中和代码中使用现有的依赖项属性 本概述还介绍了依赖项属性所特有的方面(如依赖项属性元数据) 并说明了如何在自定义类中创建自己的依赖项属性

先决条件 本主题假设您在 CLR 和面向对象的编程方面有一些基础知识 若要采用本主题中的示例 还应当了解 XAML 并知道如何编写 WPF 应用程序

依赖项属性和 CLR 属性 在 WPF 中 属性通常公开为公共语言运行库 (CLR) 属性 在基本级别 您可以在根本不知道这些属性实现为依赖项属性的情况下直接与它们交互 但是 您应当熟悉 WPF 属性系统的部分或全部功能 才能利用这些功能

依赖项属性的用途在于提供一种方法来基于其他输入的值计算属性值 这些其他输入可以包括系统属性(如主题和用户首选项) 实时属性确定机制(如数据绑定和动画/演示图板) 重用模板(如资源和样式)或者通过与元素树中其他元素的父子关系来公开的值 另外 可以通过实现依赖项属性来提供独立验证 默认值 监视其他属性的更改的回调以及可以基于可能的运行时信息来强制指定属性值的系统 派生类还可以通过重写依赖项属性元数据(而不是重写现有属性的实际实现或者创建新属性)来更改现有属性的某些具体特征

在 SDK 参考中 可以根据某个属性的托管引用页上是否存在 依赖项属性信息 部分来确定该属性是否为依赖项属性 依赖项属性信息 部分包括一个指向该依赖项属性的 DependencyProperty 标识符字段的链接 还包括一个为该属性设置的元数据选项的列表 每个类的重写信息以及其他详细信息

依赖项属性支持 CLR 属性 依赖项属性和 WPF 属性系统通过提供一个支持属性的类型来扩展属性功能 这是使用私有字段支持该属性的标准模式的替代实现方法 该类型的名称是 DependencyProperty 定义 WPF 属性系统的另一个重要类型是 DependencyObject DependencyObject 定义可以注册和拥有依赖项属性的基类

下面汇集了在本软件开发工具包 (SDK) 文档中 在讨论依赖项属性时所使用的术语

依赖项属性 一个由 DependencyProperty 支持的属性

依赖项属性标识符 一个 DependencyProperty 实例 在注册依赖项属性时作为返回值获得 之后将存储为一个类成员 在与 WPF 属性系统交互的许多 API 中 此标识符用作一个参数

CLR 包装 属性的实际 get 和 set 实现 这些实现通过在 GetValue 和 SetValue 调用中使用依赖项属性标识符来合并此标识符 从而使用 WPF 属性系统为属性提供支持

下面的示例定义 IsSpinning 依赖项属性 并说明 DependencyProperty 标识符与它所支持的属性之间的关系

以上就是关于求大神帮画个图说明下.NET、C#、WPF三者之间的关系...谢谢全部的内容,包括:求大神帮画个图说明下.NET、C#、WPF三者之间的关系...谢谢、什么是WPF应用程序、wpf主要用来开发啥用vs开发还是别的软件开发比较方便等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

转载请注明原文地址:https://juke.outofmemory.cn/read/3647368.html

最新回复(0)