Windows 窗体和 WPF 属性映射

Windows 窗体和 WPF 技术具有两种相似但不同的属性模型。 属性映射 支持两种体系结构之间的互作,并提供以下功能:

  • 可以轻松地将主机环境中的相关属性更改映射到托管控件或元素。

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

  • 允许轻松删除、重写或扩展默认属性。

  • 确保自动检测主机上的属性值更改并将其转换为托管控件或元素。

注释

属性更改事件不会在宿主控件或元素的层级结构中向上传播。 如果属性的本地值没有由于直接设置、样式、继承、数据绑定或其他机制而发生变化,则不会执行属性转换。

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

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 不是纯色,控件 WindowsFormsHost 将从 Background 属性创建位图。 该 WindowsFormsHost 控件将此位图分配给 BackgroundImage 托管控件的属性。 这提供了类似于透明度的效果。 注意: 可以重写此行为,也可以删除 Background 属性映射。
Cursor Cursor 如果未重新分配默认映射,控件将遍历其上级层次结构, WindowsFormsHost 直到找到具有其 Cursor 属性集的上级。 此值将转换为最近的相应 Windows 窗体游标。

如果属性的默认映射 尚未重新分配,则遍历将停止在第一个上级上,并设置为 < a0/a0 > 。
FlowDirection

System.Windows.FlowDirection
RightToLeft

System.Windows.Forms.RightToLeft
LeftToRight 映射到 No

RightToLeft 映射到 Yes

Inherit 未映射。

FlowDirection.RightToLeft 映射到 RightToLeft.Yes
FontStyle Style 位于托管控件的 System.Drawing.Font WPF 属性集转换为相应的 Font属性集。 当其中一个属性发生更改时,将创建一个新 Font 属性。 对于 NormalItalic 已禁用。 对于 ItalicObliqueItalic 已启用。
FontWeight Style 位于托管控件的 System.Drawing.Font WPF 属性集转换为相应的 Font属性集。 当其中一个属性发生更改时,将创建一个新 Font 属性。 对于BlackBold、、ExtraBoldDemiBoldHeavyMediumSemiBoldUltraBoldBold 已启用。 对于ExtraLightLightNormalRegularThinUltraLightBold已禁用。
FontFamily

FontSize

FontStretch

FontStyle

FontWeight
Font

System.Drawing.Font
WPF 属性集转换为相应的 Font属性集。 当其中一个属性发生更改时,将创建一个新 Font 属性。 托管的 Windows 窗体控件根据字号调整大小。

WPF 中的字号表示为一英寸的九十六分之一,在 Windows 窗体中表示为一英寸的 70 秒。 相应的转换是:

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

System.Windows.Media.Brush
ForeColor

System.Drawing.Color
属性 Foreground 映射使用以下规则执行:

- 如果是ForegroundSolidColorBrush,则Color用于 ForeColor
- 如果Foreground为 aGradientBrush,则使用偏移值ForeColor最低的颜色GradientStop
- 对于任何其他 Brush 类型,保留 ForeColor 不变。 这意味着使用默认值。
IsEnabled Enabled 设置时 IsEnabledWindowsFormsHost 元素设置 Enabled 托管控件上的属性。
Padding Padding 托管 Windows 窗体控件上属性的所有四个值 Padding 都设置为相同的 Thickness 值。

- 值大于 MaxValue 的会被设置为 MaxValue
小于 MinValue 的值被设为 MinValue
Visibility Visible - Visible映射到Visible = true. 托管的 Windows 窗体控件可见。 不建议在托管控件false上显式设置Visible属性。
- Collapsed 映射到 Visible = truefalse. 宿主的 Windows 窗体控件没有被绘制,并且它的区域已折叠。
- Hidden :托管的 Windows 窗体控件占用布局中的空间,但不可见。 在本例中,该 Visible 属性设置为 true. 不建议在托管控件false上显式设置Visible属性。

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

有关详细信息,请参阅 演练:使用 WindowsFormsHost 元素映射属性

对父属性的更新

对大多数父属性的更改会向托管的子控件发出通知。 以下列表描述了在值发生更改时不会导致通知的属性。

例如,如果更改Background属性的值在WindowsFormsHost元素中,那么托管控件的BackColor属性不会更改。

ElementHost 控件的属性映射

以下属性提供内置更改通知。 映射以下属性时,请勿调用 OnPropertyChanged 该方法:

  • 自动调整大小

  • 背景色

  • 背景图片

  • 背景图像布局

  • BindingContext

  • 触发验证

  • ContextMenu

  • ContextMenuStrip

  • 游标

  • 码头

  • 已启用

  • 字体

  • ForeColor

  • 位置

  • 页边距

  • 填充

  • 家长

  • 区域

  • 从右到左

  • 尺寸

  • TabIndex

  • TabStop

  • 文本

  • 可见

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 Forms 不是标准光标,将使用默认光标。
Enabled IsEnabled 当设置Enabled时,控件ElementHost将在托管元素上设置IsEnabled属性。
Font

System.Drawing.Font
FontFamily

FontSize

FontStretch

FontStyle

FontWeight
该值 Font 将转换为相应的 WPF 字体属性集。
Bold FontWeight 在托管的元素上 如果BoldtrueFontWeight则设置为Bold

如果Boldfalse,则将FontWeight设置为Normal
Italic FontStyle 在托管的元素上 如果Italictrue,则FontStyle设置为Italic

Italic如果是falseFontStyle则设置为Normal
Strikeout 托管元素上的 TextDecorations 仅在托管 TextBlock 控件时适用。
Underline TextDecorations 在托管的元素上 仅在托管 TextBlock 控件时适用。
RightToLeft

System.Windows.Forms.RightToLeft
FlowDirection

FlowDirection
No 映射到 LeftToRight

Yes 映射到 RightToLeft
Visible Visibility ElementHost 控件使用以下规则设置 Visibility 托管元素上的属性:

- Visible = true映射到Visible.
- Visible = false 映射到 Hidden.

另请参阅