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 窗体游标。 如果属性的默认映射 |
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 属性。 对于 Normal: Italic 已禁用。 对于 Italic 或 Oblique: Italic 已启用。 |
FontWeight | Style 位于托管控件的 System.Drawing.Font | WPF 属性集转换为相应的 Font属性集。 当其中一个属性发生更改时,将创建一个新 Font 属性。 对于Black、Bold、、ExtraBoldDemiBold、Heavy、Medium、SemiBold或UltraBold: Bold 已启用。 对于ExtraLight、Light、Normal、RegularThin或UltraLight:Bold已禁用。 |
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 | 设置时 IsEnabled , WindowsFormsHost 元素设置 Enabled 托管控件上的属性。 |
Padding | Padding | 托管 Windows 窗体控件上属性的所有四个值 Padding 都设置为相同的 Thickness 值。 - 值大于 MaxValue 的会被设置为 MaxValue。 小于 MinValue 的值被设为 MinValue。 |
Visibility | Visible |
-
Visible映射到Visible = true . 托管的 Windows 窗体控件可见。 不建议在托管控件false 上显式设置Visible属性。- Collapsed 映射到 Visible = true 或 false . 宿主的 Windows 窗体控件没有被绘制,并且它的区域已折叠。- Hidden :托管的 Windows 窗体控件占用布局中的空间,但不可见。 在本例中,该 Visible 属性设置为 true . 不建议在托管控件false 上显式设置Visible属性。 |
该元素完全支持 WindowsFormsHost 容器元素上的附加属性。
有关详细信息,请参阅 演练:使用 WindowsFormsHost 元素映射属性。
对父属性的更新
对大多数父属性的更改会向托管的子控件发出通知。 以下列表描述了在值发生更改时不会导致通知的属性。
例如,如果更改Background属性的值在WindowsFormsHost元素中,那么托管控件的BackColor属性不会更改。
ElementHost 控件的属性映射
以下属性提供内置更改通知。 映射以下属性时,请勿调用 OnPropertyChanged 该方法:
自动调整大小
背景色
背景图片
背景图像布局
BindingContext
触发验证
ContextMenu
ContextMenuStrip
游标
码头
已启用
字体
ForeColor
位置
页边距
填充
家长
区域
从右到左
尺寸
TabIndex
TabStop
文本
可见
该 ElementHost 控件使用以下翻译表将默认 Windows 窗体属性转换为其 WPF 等效项。
有关详细信息,请参阅 演练:使用 ElementHost 控件映射属性。