Windows 窗体和 WPF 属性映射

更新:2007 年 11 月

Windows 窗体和 WPF 技术具有两个相似但又各不相同的属性模型。属性映射支持在两种体系结构中的互操作,并提供下列功能:

  • 简化了将宿主环境中的相关属性更改映射到承载的控件或元素的操作。

  • 提供了对映射最常用属性的默认处理。

  • 简化了对默认属性的删除、重写或扩展操作。

  • 确保可自动检测宿主上的属性值更改并可转换为承载的控件或元素。

说明:

属性更改事件不会传播到承载控件或元素层次结构中。如果由于直接设置、样式、继承、数据绑定或其他更改属性值的机制原因,属性的本地值未发生更改,则不会执行属性转换。

使用 WindowsFormsHost 元素上的 PropertyMap 属性和 ElementHost 控件上的 PropertyMap 属性访问属性映射。

使用 WindowsFormsHost 元素映射属性

WindowsFormsHost 元素使用以下转换表将默认的 WPF 属性转换为其 Windows 窗体等效项。

Windows Presentation Foundation 宿主

Windows 窗体

互操作行为

Background

(System.Windows.Media.Brush)

BackColor

(System.Drawing.Color)

WindowsFormsHost 元素将设置承载的控件的 BackColor 属性和 BackgroundImage 属性。将使用下列规则执行映射:

  • 如果 Background 是纯色,则将其转换并用于设置承载的控件的 BackColor 属性。未在承载的控件上设置 BackColor 属性,因为承载的控件可以继承 BackColor 属性的值。

说明:

承载的控件不支持透明。分配到 BackColor 的任何颜色都必须是完全不透明的,且 alpha 值为 0xFF。

说明:

您可以重写此行为,也可以移除 Background 属性映射。

Cursor

Cursor

如果未重新分配默认映射,则 WindowsFormsHost 控件将遍历其上级层次结构,直到找到已设置其 Cursor 属性的上级为止。此值将转换为最接近的对应 Windows 窗体光标。

如果尚未重新分配 ForceCursor 属性的默认映射,则遍历将在第一个 ForceCursor 设置为 true 的上级处停止。

FlowDirection

(System.Windows.FlowDirection)

RightToLeft

(System.Windows.Forms.RightToLeft)

LeftToRight 映射为 No

RightToLeft 映射为 Yes

不映射 Inherit

FlowDirection.RightToLeft 映射为 RightToLeft.Yes

FontStyle

位于承载的控件的 System.Drawing.Font 中的 Style

WPF 属性集将转换为相应的 Font。当这些属性中的一种发生更改时,将创建新的 Font。对于 Normal:已禁用 Italic。对于 ItalicOblique:已启用 Italic

FontWeight

位于承载的控件的 System.Drawing.Font 中的 Style

WPF 属性集将转换为相应的 Font。当这些属性中的一种发生更改时,将创建新的 Font。对于 BlackBoldDemiBoldExtraBoldHeavyMediumSemiBoldUltraBold:已启用 Bold。对于 ExtraLightLightNormalRegularThinUltraLight:已禁用 Bold

FontFamily

FontSize

FontStretch

FontStyle

FontWeight

Font

(System.Drawing.Font)

WPF 属性集将转换为相应的 Font。当这些属性中的一种发生更改时,将创建新的 Font。将根据字号调整承载的 Windows 窗体控件的大小。

WPF 中的字号表示为 1/96 英寸,而 Windows 窗体中则是 1/72 英寸。对应的转换公式为:

Windows 窗体字号 = WPF 字号 * 72.0 / 96.0。

Foreground

(System.Windows.Media.Brush)

ForeColor

(System.Drawing.Color)

将使用下列规则执行 Foreground 属性映射:

IsEnabled

Enabled

设置 IsEnabled 时,WindowsFormsHost 元素将设置承载的控件上的 Enabled 属性。

Padding

Padding

承载的 Windows 窗体控件上的所有四个 Padding 属性值将设置为相同的 Thickness 值。

Visibility

Visible

  • Visible 映射为 Visible = true。承载的 Windows 窗体控件是可见的。建议您不要将承载的控件上的 Visible 属性显式设置为 false。

  • Collapsed 映射为 Visible = true 或 false. 不会绘制承载的 Windows 窗体控件,其区域将折叠起来。

  • Hidden:承载的 Windows 窗体控件占用布局空间,但不可见。在这种情况下,Visible 属性设置为 true。建议您不要将承载的控件上的 Visible 属性显式设置为 false。

WindowsFormsHost 元素完全支持容器元素上的附加属性。

有关更多信息,请参见演练:使用 WindowsFormsHost 元素映射属性

更新到父属性

大部分父属性的更改都将导致向承载的子控件发出通知。以下列表描述了其值更改时不会发送通知的属性。

例如,如果更改了 WindowsFormsHost 元素的 Background 属性的值,则承载的控件的 BackColor 属性不会更改。

使用 ElementHost 控件映射属性

下列属性提供了内置的更改通知。在映射这些属性时,请不要调用 OnPropertyChanged 方法:

  • AutoSize

  • BackColor

  • BackgroundImage

  • BackgroundImageLayout

  • BindingContext

  • CausesValidation

  • ContextMenu

  • ContextMenuStrip

  • Cursor

  • Dock

  • Enabled

  • Font

  • ForeColor

  • Location

  • Margin

  • Padding

  • Parent

  • Region

  • RightToLeft

  • Size

  • TabIndex

  • TabStop

  • Text

  • Visible

ElementHost 控件使用以下转换表将默认的 Windows 窗体属性转换为其 WPF 等效项。

有关更多信息,请参见演练:使用 ElementHost 控件映射属性

Windows 窗体宿主

Windows Presentation Foundation

互操作行为

BackColor

(System.Drawing.Color)

Background

承载的元素上的 (System.Windows.Media.Brush)

设置此属性将强制使用 ImageBrush 重新绘制。如果 BackColorTransparent 属性设置为 false(默认值),则此 ImageBrush 将以 ElementHost 控件的外观为基础,包括其 BackColorBackgroundImageBackgroundImageLayout 属性,以及任何附加的绘图处理程序。

如果 BackColorTransparent 属性设置为 true,则 ImageBrush 将以 ElementHost 控件的父级的外观为基础,包括该父级的 BackColorBackgroundImageBackgroundImageLayout 属性,以及任何附加的绘图处理程序。

BackgroundImage

(System.Drawing.Image)

Background

承载的元素上的 (System.Windows.Media.Brush)

设置此属性,将导致产生的行为与 BackColor 映射所描述的行为相同。

BackgroundImageLayout

Background

承载的元素上的 (System.Windows.Media.Brush)

设置此属性,将导致产生的行为与 BackColor 映射所描述的行为相同。

Cursor

(System.Windows.Forms.Cursor)

Cursor

(System.Windows.Input.Cursor)

Windows 窗体标准光标将转换为相应的 WPF 标准光标。如果 Windows 窗体不是一个标准光标,则将分配默认值。

Enabled

IsEnabled

设置 Enabled 时,ElementHost 控件将设置承载的元素上的 IsEnabled 属性。

Font

(System.Drawing.Font)

FontFamily

FontSize

FontStretch

FontStyle

FontWeight

Font 值将转换为相应 WPF 字体属性集。

Bold

承载的元素上的 FontWeight

如果 Bold 为 true,则 FontWeight 设置为 Bold

如果 Bold 为 false,则 FontWeight 设置为 Normal

Italic

承载的元素上的 FontStyle

如果 Italic 为 true,则 FontStyle 设置为 Italic

如果 Italic 为 false,则 FontStyle 设置为 Normal

Strikeout

承载的元素上的 TextDecorations

仅当承载 TextBlock 控件时才适用。

Underline

承载的元素上的 TextDecorations

仅当承载 TextBlock 控件时才适用。

RightToLeft

(System.Windows.Forms.RightToLeft)

FlowDirection

(FlowDirection)

No 映射为 LeftToRight

Yes 映射为 RightToLeft

Visible

Visibility

ElementHost 控件通过使用下列规则设置承载的元素上的 Visibility 属性:

请参见

任务

演练:使用 WindowsFormsHost 元素映射属性

演练:使用 ElementHost 控件映射属性

概念

WPF 和 Win32 互操作概述

Windows Presentation Foundation 和 Windows 窗体互操作中支持的方案

参考

ElementHost

WindowsFormsHost