Windows 窗体和 WPF 属性映射
Windows Forms和 WPF 技术具有两个相似但又各不相同的属性模型。 属性映射支持在两种体系结构中的互操作,并提供下列功能:
简化了将宿主环境中的相关属性更改映射到承载的控件或元素的操作。
提供了对映射最常用属性的默认处理。
简化了对默认属性的删除、重写或扩展操作。
确保可自动检测宿主上的属性值更改并可转换为承载的控件或元素。
注意 |
---|
属性更改事件不会传播到承载控件或元素层次结构中。如果由于直接设置、样式、继承、数据绑定或其他更改属性值的机制原因,属性的本地值未发生更改,则不会执行属性转换。 |
使用 WindowsFormsHost 元素上的 PropertyMap 属性和 ElementHost 控件上的 PropertyMap 属性访问属性映射。
使用 WindowsFormsHost 元素映射属性
WindowsFormsHost 元素使用以下转换表将默认的 WPF 属性转换为其 Windows Forms等效项。
Windows Presentation Foundation 宿主 |
Windows 窗体 |
互操作行为 |
---|---|---|
WindowsFormsHost 元素将设置承载的控件的 BackColor 属性和 BackgroundImage 属性。 将使用下列规则执行映射:
注意
承载的控件不支持透明。分配到 BackColor 的任何颜色都必须是完全不透明的,且 alpha 值为 0xFF。
注意
您可以重写此行为,也可以移除 Background 属性映射。
|
||
如果未重新分配默认映射,则 WindowsFormsHost 控件将遍历其上级层次结构,直到找到已设置其 Cursor 属性的上级为止。 此值将转换为最接近的对应 Windows Forms光标。 如果尚未重新分配 ForceCursor 属性的默认映射,则遍历将在第一个 ForceCursor 设置为 true 的上级处停止。 |
||
LeftToRight 映射到 No。 RightToLeft 映射到 Yes。 不映射 Inherit。 FlowDirection.RightToLeft 映射为 RightToLeft.Yes。 |
||
位于承载的控件的 System.Drawing.Font 中的 Style |
WPF 属性集将转换为相应的 Font。 当这些属性中的一种发生更改时,将创建新的 Font。 对于 Normal:已禁用 Italic。 对于 Italic 或 Oblique:已启用 Italic。 |
|
位于承载的控件的 System.Drawing.Font 中的 Style |
WPF 属性集将转换为相应的 Font。 当这些属性中的一种发生更改时,将创建新的 Font。 对于 Black、Bold、DemiBold、ExtraBold、Heavy、Medium、SemiBold 或 UltraBold:已启用 Bold。 对于 ExtraLight、Light、Normal、Regular、Thin 或 UltraLight:已禁用 Bold。 |
|
WPF 属性集将转换为相应的 Font。 当这些属性中的一种发生更改时,将创建新的 Font。 将根据字号调整承载的 Windows Forms控件的大小。 WPF 中的字号表示为 1/96 英寸,而 Windows Forms中则是 1/72 英寸。 对应的转换公式为: Windows Forms字号 = WPF 字号 * 72.0 / 96.0。 |
||
将使用下列规则执行 Foreground 属性映射:
|
||
设置 IsEnabled 时,WindowsFormsHost 元素将设置承载的控件上的 Enabled 属性。 |
||
WindowsFormsHost 元素完全支持容器元素上的附加属性。
有关更多信息,请参见演练:使用 WindowsFormsHost 元素映射属性。
更新到父属性
大部分父属性的更改都将导致向承载的子控件发出通知。 以下列表描述了其值更改时不会发送通知的属性。
例如,如果更改了 WindowsFormsHost 元素的 Background 属性的值,则承载的控件的 BackColor 属性不会更改。
使用 ElementHost 控件映射属性
下列属性提供了内置的更改通知。 在映射这些属性时,请不要调用 OnPropertyChanged 方法:
AutoSize
BackColor
BackgroundImage
BackgroundImageLayout
BindingContext
CausesValidation
ContextMenu
ContextMenuStrip
光标
Dock
Enabled
字体
前景色
位置
Margin
填充
父级
Region
RightToLeft
大小
TabIndex
TabStop
Text
Visible
ElementHost 控件使用以下转换表将默认的 Windows Forms属性转换为其 WPF 等效项。
有关更多信息,请参见演练:使用 ElementHost 控件映射属性。
Windows 窗体宿主 |
Windows Presentation Foundation |
互操作行为 |
---|---|---|
承载的元素上的 (System.Windows.Media.Brush) |
设置此属性将强制使用 ImageBrush 重新绘制。 如果 BackColorTransparent 属性设置为 false(默认值),则此 ImageBrush 将以 ElementHost 控件的外观为基础,包括其 BackColor、BackgroundImage 和 BackgroundImageLayout 属性,以及任何附加的绘图处理程序。 如果 BackColorTransparent 属性设置为 true,则 ImageBrush 将以 ElementHost 控件的父级的外观为基础,包括该父级的 BackColor、BackgroundImage 和 BackgroundImageLayout 属性,以及任何附加的绘图处理程序。 |
|
承载的元素上的 (System.Windows.Media.Brush) |
设置此属性,将导致产生的行为与 BackColor 映射所描述的行为相同。 |
|
承载的元素上的 (System.Windows.Media.Brush) |
设置此属性,将导致产生的行为与 BackColor 映射所描述的行为相同。 |
|
Windows Forms标准光标将转换为相应的 WPF 标准光标。 如果 Windows Forms不是一个标准光标,则将分配默认值。 |
||
设置 Enabled 时,ElementHost 控件将设置承载的元素上的 IsEnabled 属性。 |
||
Font 值将转换为相应 WPF 字体属性集。 |
||
承载的元素上的 FontWeight |
如果 Bold 为 true,则 FontWeight 设置为 Bold。 如果 Bold 为 false,则 FontWeight 设置为 Normal。 |
|
承载的元素上的 FontStyle |
||
承载的元素上的 TextDecorations |
仅当承载 TextBlock 控件时才适用。 |
|
承载的元素上的 TextDecorations |
仅当承载 TextBlock 控件时才适用。 |
|
No 映射到 LeftToRight。 Yes 映射到 RightToLeft。 |
||
ElementHost 控件通过使用下列规则设置承载的元素上的 Visibility 属性: |