<Image>
<Image.Source>
<BitmapImage DecodePixelWidth="200" UriSource="images/myimage.png"/>
</Image.Source>
</Image>
DecodePixelWidth (或 DecodePixelHeight) 是 BitmapImage 的属性,因此需要一个显式 BitmapImage XAML 对象元素才能将 DecodePixel* 属性设置为 XAML 中的属性。
如果要在代码中创建 Image 实例,则可能已创建 BitmapImage 实例作为为 Source 属性提供的值,因此只需在 BitmapImage 实例上设置 DecodePixelWidth (或 DecodePixelHeight) ,然后再设置 UriSource 属性。 DecodePixelType 属性还影响解码操作解释像素值的方式。
若要防止多次解码图像,请从统一资源标识符 (URI) 分配图像源属性,而不是在可能的情况下使用内存流。 XAML 框架可以在多个位置将同一统一资源标识符 (URI) 与一个解码图像相关联,但即使多个内存流包含相同的数据,也无法对多个内存流执行相同的操作。
可以通过将所有关联的 Image.Source 值设置为 null,从映像缓存中删除图像文件。
有关 Image 类和性能的详细信息,请参阅 优化动画和媒体。
图像文件编码和解码
对图像文件的基础编解码器支持由 Windows 映像组件 (WIC) API 提供。 有关编解码器记录的特定图像格式的详细信息,请参阅 本机 WIC 编解码器。
用于图像、 BitmapImage 和 BitmapSource 的 API 不包含任何用于对媒体格式进行编码和解码的专用方法。 所有解码操作都内置为设置或重置源时发生的操作。 这使得类更易于用于构造 UI,因为它们具有一组默认的受支持的源文件格式和解码行为。 BitmapImage 等类将一些解码选项和逻辑公开为 ImageOpened 或 ImageFailed 事件的事件数据的一部分。 如果需要高级图像文件解码或图像编码,则应使用 Windows.Graphics.Imaging 命名空间中的 API。 如果你的应用方案涉及图像文件格式转换,或者操作用户可将结果保存为文件的图像,则可能需要这些 API。 Windows 映像组件 (WINDOWS 的 WIC) 组件也支持编码 API。
图像 宽度和高度
Image 类从 FrameworkElement 继承 Width 和 Height 属性,这些属性可能控制 Image 控件在 UI 中显示时呈现的大小。 如果未设置 Width 或 Height,则宽度和高度由图像源的自然大小决定。 例如,如果加载高 300 像素、宽 400 像素的位图图像(以源文件格式记录),则图像控件计算其自然大小时,这些度量值将用于宽度和高度。 可以在图像呈现后检查 ActualHeight 和 ActualWidth,以获取度量信息。 或者,可以在图像呈现之前处理 ImageOpened 和检查图像文件属性,例如 PixelHeight 和 PixelWidth。
如果仅设置 Width 或 Height 属性之一,但不能同时设置两者,则系统可以使用该维度作为指导并计算另一个维度,从而保留纵横比。 如果不确定源文件维度,请选择在布局方案中最重要的控制维度,让系统计算另一个维度,然后容器的布局行为通常会调整布局以适应情况。
如果未设置 宽度 和/或 高度,并将图像保留为其自然大小,则图像的 Stretch 属性可以控制图像源文件将如何填充指定为 Width 和 Height 的空间。 默认 Stretch 值为 Uniform,当图像适合布局容器时,它会保留纵横比。 如果容器的维度的纵横比不相同,则至少有空白空间仍属于 Image 的一部分,但不显示任何图像像素,至少在使用 Stretch 的 Uniform 值时是这样。 UniformToFill for Stretch 不会留出空白空间,但如果尺寸不同,可能会剪裁图像。 Stretch填充不会留下空白空间,但可能会更改纵横比。 可以尝试这些值,以查看在布局方案中最适合图像显示的内容。 此外,请注意,某些布局容器可能会调整没有特定 Width 和 Height 的图像的大小以填充整个布局空间,在这种情况下,可以选择在映像或容器上设置特定大小。
NineGrid
如果图像具有不应统一缩放的区域,则使用 NineGrid 技术是调整与显示区域不同的自然大小图像的另一个选项。 例如,可以使用一个背景图像,该背景图像的固有边框只应在一个维度中拉伸,而角不应拉伸,但图像中心可以拉伸以满足两个维度的布局要求。 有关详细信息,请参阅 NineGrid。
映像的资源限定和本地化
图像 源文件和缩放
应以多种建议大小创建图像源,以确保在 Windows 8 缩放应用时应用外观美观。 为图像指定 源 时,可以对将正确资源用于特定于设备缩放因子的资源使用命名约定。 这由应用在运行时自动确定。 有关要使用的命名约定的详细信息,请参阅 快速入门:使用文件或图像资源。
有关如何正确设计图像进行缩放的详细信息,请参阅 布局和缩放的 UX 指南。
使用非限定资源
不限定资源是一种可以使用的方法,其中基本资源引用引用为默认资源,资源管理过程可以自动查找等效的本地化资源。 可以使用自动处理来访问具有当前规模和区域性限定符的不限定资源,也可以使用 ResourceManager 和 ResourceMap 以及区域性和缩放限定符来直接获取资源。 有关详细信息,请参阅资源管理系统。
Image 的 FlowDirection
如果将 FlowDirection 设置为 Image 的 RightToLeft ,图像的视觉内容将水平翻转。 但是,Image 元素不会从任何父元素继承 FlowDirection 值。 通常,你只需要与布局相关的图像中的图像翻转行为,但不一定与嵌入文本的元素或其他对从右向左的受众没有意义翻转的元素。 若要获取图像翻转行为,必须将 Image 元素上的 FlowDirection 元素专门设置为 RightToLeft,或在代码隐藏中设置 FlowDirection 属性。 请考虑通过 x:Uid 指令标识 Image 元素,并将 FlowDirection 值指定为Windows 运行时资源,以便本地化专家稍后可以更改此值,而无需更改 XAML 或代码。
Image 类和辅助功能
Image 类不是真正的控件类,因为它不是 Control 的后代类。 不能将焦点调用 Image 元素,也不能将 Image 元素置于制表符序列中。 有关在 UI 中使用图像和 Image 元素的辅助功能方面的详细信息,请参阅 基本辅助功能信息。
Windows 8 行为
对于 Windows 8,资源可以使用资源限定符模式来加载不同的资源,具体取决于特定于设备的缩放。 但是,如果在应用运行时缩放因子发生更改,则不会自动重新加载资源。 在这种情况下,应用必须处理重载资源,方法是处理 dpiChanged 事件 (或弃用的 LogicalDpiChanged 事件) ,并使用 ResourceManager API 手动重新加载适合新缩放因子的资源。 从Windows 8.1开始,如果应用运行时缩放因子发生更改,则会自动重新评估最初为应用检索的任何资源。 此外,当该资源是 Image 对象的图像源时,将触发 ImageOpened 或 ImageFailed) (源加载事件之一,因为系统会请求新资源,然后将其应用于 Image。 发生运行时缩放更改的情况是,当用户将应用移动到其他监视器时,有多个监视器可用。
如果将应用代码从 Windows 8 迁移到 Windows 8.1可能需要考虑此行为更改,因为它会导致在处理缩放更改时在运行时发生的 ImageOpened 或 ImageFailed 事件,即使在 XAML 中设置了 Source 的情况下也是如此。 此外,如果确实有处理 DpiChanged/LogicalDpiChanged 并重置资源的代码,则应根据新的Windows 8.1自动重载行为检查是否仍需要该代码。
对于针对 Windows 8 编译的应用,如果它在 Windows 8.1 上运行,将继续使用 Windows 8 行为。
版本历史记录
Windows 版本
SDK 版本
获取与此 对象关联的 CoreDispatcher 。 CoreDispatcher 表示可以访问 UI 线程上的 DependencyObject 的工具,即使代码是由非 UI 线程启动的。
(继承自 DependencyObject)
获取或设置文本和其他 UI 元素在控制其布局的任何父元素中的流动方向。 此属性可以设置为 LeftToRight 或 RightToLeft。 在任何元素上将 FlowDirection 设置为 RightToLeft 会将对齐方式设置为右对齐,将读取顺序设置为从右到左,并将控件的布局设置为从右到左流动。
(继承自 FrameworkElement)
获取或设置 UIElement (使用的 UI 主题及其子元素) 资源确定。 使用 RequestedTheme 指定的 UI 主题可以替代应用级 RequestedTheme。
(继承自 FrameworkElement)
获取本地定义的资源字典。 在 XAML 中,可以通过 XAML 隐式集合语法将资源项建立为 property 元素的 frameworkElement.Resources
子对象元素。
(继承自 FrameworkElement)
为指定的路由事件添加路由事件处理程序,并将该处理程序添加到当前元素的处理程序集合中。 将 handledEventsToo 指定为 true 以调用提供的处理程序,即使在其他位置处理事件也是如此。
(继承自 UIElement)
汇报 UIElement 的 DesiredSize。 通常,为其布局子级实现自定义布局的对象从其自己的 MeasureOverride 实现中调用此方法,以形成递归布局更新。
(继承自 UIElement)
每当应用程序代码或内部进程 ((例如重新生成布局传递) 调用 ApplyTemplate)时调用。 用最简单的术语来说,这意味着在 UI 元素在应用中显示之前调用 方法。 重写此方法以影响类的默认后模板逻辑。
(继承自 FrameworkElement)
在应用中处理 键盘快捷方式 (或快捷键) 之前调用。 每当应用程序代码或内部进程调用 ProcessKeyboardAccelerators 时调用。 重写此方法以影响默认加速器处理。
(继承自 UIElement)
在释放之前启动 按下 操作的指针设备时发生,同时在此元素中。 请注意, 不保证按下 操作的结尾会触发 PointerReleased 事件;可能会触发其他事件。 有关详细信息,请参阅备注。
(继承自 UIElement)