WPF中的可视化对象(Visual)

原创 2007年09月17日 13:17:00

这是MSDN对Visual的解释:
Visual class:
Provides rendering support in WPF, which includes hit testing, coordinate transformation, and bounding box calculations.

下面是关于Visual类的继承关系图,它清楚地表明了相关的层次关系:
System.Object
        System.Windows.Threading.DispatcherObject
                System.Windows.DependencyObject
                        System.Windows.Media.Visual
                                System.Windows.Media.ContainerVisual (支持包含其他Visual对象)
                                        System.Windows.Media.DrawingVisual
                                        System.Windows.Media.HostVisual
                                System.Windows.UIElement
                                        System.Windows.FrameworkElement
                                                System.Windows.Documents.Adorner
                                                System.Windows.Documents.AdornerLayer
                                                System.Windows.Documents.DocumentReference
                                                System.Windows.Documents.FixedPage
                                                System.Windows.Documents.Glyphs
                                                System.Windows.Documents.PageContent
                                                System.Windows.Interop.HwndHost
                                                Microsoft.Windows.Themes.ScrollChrome
                                                Microsoft.Windows.Themes.BulletChrome
                                                Microsoft.Windows.Themes.ScrollChrome
                                                System.Windows.Controls.Panel
                                                System.Windows.Controls.Control
                                                System.Windows.Controls.AccessText
                                                System.Windows.Controls.AdornedElementPlaceholder
                                                System.Windows.Controls.Decorator
                                                System.Windows.Controls.ContentPresenter
                                                System.Windows.Controls.Image
                                                System.Windows.Controls.InkCanvas
                                                System.Windows.Controls.ItemsPresenter
                                                System.Windows.Controls.MediaElement
                                                System.Windows.Controls.Page
                                                System.Windows.Controls.TextBlock
                                                System.Windows.Controls.ToolBarTray
                                                System.Windows.Controls.Viewport3D
                                                System.Windows.Shapes.Shape
                                                System.Windows.Controls.Primitives.GridViewRowPresenterBase
                                                System.Windows.Controls.Primitives.DocumentPageView
                                                System.Windows.Controls.Primitives.Popup
                                                System.Windows.Controls.Primitives.TickBar
                                                System.Windows.Controls.Primitives.Track
                                System.Windows.Media.Media3D.Viewport3DVisual 

再简洁点:
System.Object
        System.Windows.Threading.DispatcherObject
                System.Windows.DependencyObject
                        System.Windows.Media.Visual
                                System.Windows.Media.ContainerVisual
                                System.Windows.UIElement
                                        System.Windows.FrameworkElement
                                System.Windows.Media.Media3D.Viewport3DVisual

Visual:是WPF中用以呈现点击测试(与一个点、矩形、区域或其它对象之间执行像素级的点击检测,比如判断鼠标是否在一个对象内等),坐标转换和计算可视化对象尺寸范围的类。

以下是Visual,UIElement,FrameworkElement的构造示意:
public abstract class Visual : DependencyObject
public class UIElement : Visual, IAnimatable, IInputElement
public class FrameworkElement : UIElement, IFrameworkInputElement, IInputElement, ISupportInitialize

从Visual的构造看,它是继承于DependencyObject的抽像类。
而UIElement继承自Visual,FrameworkElement又继承自UIElement。

Visual是所有FrameworkElement的抽象基类。它为在WPF中写新的控件提供了入口点,在许多方面,你可以把它想像成为相当于Win32应用程序模式下的window句柄(HWND)。
Visual对象是WPF的核心对象,其主要角色是提供呈现支持。用户控件,如按钮Button和文本框TextBox,都从Visual类继承,并使用Visual定义的属性来维持它们的呈现数据。

Visual对象支持:
输入显示: 显示可视化的内容。
变换: 对可视化对象进行变换(比如尺寸变换、坐标转换等)。
裁切: 对可视化对象在裁切区域进行裁切之后显示。
点击测试(Hit testing):  检测一个指定的坐标(点)或几何对象是否在指定的可视化对象之范围内。
矩形范围计算:  确定Visual对象所涵盖的矩形区域。

架构上,Visual对象不支持包括其他应用程序开发需要的其他WPF特性:如:事件处理、版面布局、样式、数据绑定、全球化。

WPF DrawingVisual详解

代码如下:     public partial class MainWindow : Window     {         private DrawingVisual _drawingVisua...
  • wcc27857285
  • wcc27857285
  • 2016年09月19日 11:22
  • 990

WPF设置VistualBrush的Visual属性制作图片放大镜效果

效果图片:原理:设置VistualBrush的Visual属性,利用它的Viewbox属性进行缩放。XAML代码:// Window1.xaml    xmlns="http://schemas.mi...
  • johnsuna
  • johnsuna
  • 2007年12月10日 17:56
  • 7064

wpf轻量绘图DrawingVisual

wpf内置提供了Ellipse等标签画图形,不仅如此而且还提供了许多的事件(因为其继承自FrameworkElement).在某些情况下,我们可以不采用这些标签仅仅用于呈现,并不复杂的操作(没有事...
  • clingingboy
  • clingingboy
  • 2008年06月04日 12:06
  • 568

理解WPF中的视觉树和逻辑树

理解WPF中的视觉树和逻辑树  Understanding the Visual Tree and Logical Tree in WPF 这篇文章讨论WPF中视觉树和逻辑树的细微差别。同时提供了一个...
  • changtianshuiyue
  • changtianshuiyue
  • 2014年05月25日 21:50
  • 10548

WPF: 使用DrawVisual提高大数据量时的绘图性能

在WPF中绘制形状时,如果数据量大(例如一条Polyline有10万多个数据点),绘制过程会很慢。目前能想到的解决办法有: 1. 将形状绘制在位图里。 2. 升级到最新.net4.5,WPF性...
  • Creak_Phone
  • Creak_Phone
  • 2014年04月06日 13:22
  • 1047

WPF学习(一)绘制图形的三种方法及区别

WPF中用于绘图的类主要有三个,分别是Shape类、Drawing类和DrawingVisual类,Shape类存在于System.Windows.Shapes命,而Drawing类和DrawingV...
  • lesshotyang
  • lesshotyang
  • 2013年03月02日 14:02
  • 2342

DrawingVisual绘制跑马灯效果的简单实例

  • 2013年10月14日 14:56
  • 1.12MB
  • 下载

解决卡顿——在WPF中使用多线程更新UI

 解决卡顿——在WPF中使用多线程更新UI 有经验的程序员们都知道:不能在UI线程上进行耗时操作,那样会造成界面卡顿,如下就是一个简单的示例:     public partial ...
  • amanda_zhang2010
  • amanda_zhang2010
  • 2017年04月01日 17:51
  • 990

Visual Studio 2015 WPF增强:调试查看UI布局,Xaml修改tag更智能

Visual Studio 2015 WPF增强:调试查看UI布局,Xaml修改tag更智能
  • ztz0223
  • ztz0223
  • 2017年03月10日 23:12
  • 878

[WPF] 继承 FrameworkElement 并覆写 OnRender

[WPF] 继承 FrameworkElement 并覆写 OnRender
  • cloudhsu
  • cloudhsu
  • 2010年09月07日 17:46
  • 4130
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WPF中的可视化对象(Visual)
举报原因:
原因补充:

(最多只允许输入30个字)