- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建 Windows 应用商店应用程序,同时学习 XAML。我想在 GridView 中显示的 http URI 中有远程图像。
我最初的解决方案涉及使用 HttpClient
从 URI 下载图像字节数组,获取 RandomAccessStreamReference
,构造一个 BitmapImage
,然后将 XAML Image
控件的源属性设置为构造的 BitmapImage
。然而,这个解决方案被证明相当慢(需要 1-2 整秒才能获得一张图像)。
我的下一个解决方案是将原始 URI 直接绑定(bind)到 XAML Image
控件的源属性,XAML 引擎似乎自行解决了这个问题。过去需要 10 秒才能加载大约 8-10 张图片的东西突然变成了瞬间。
有谁知道 XAML Image
控件的默认 URI 转换器究竟是如何解析远程图像数据的?完全有可能我的第一个解决方案实现不当,但差异大到足以激起我的好奇心。
最佳答案
假设我从 ImageSourceConverter
中找到了正确的代码片段类,当您将源指定为字符串时,转换器将尝试执行此操作:
if (((value is string) && !string.IsNullOrEmpty((string) value)) || (value is Uri))
{
UriHolder uriFromUriContext = TypeConverterHelper.GetUriFromUriContext(context, value);
return BitmapFrame.CreateFromUriOrStream(uriFromUriContext.BaseUri, uriFromUriContext.OriginalUri, null, BitmapCreateOptions.None, BitmapCacheOption.Default, null);
}
BitmapFrame
反过来使用 BitmapDecoder
加载图像。当源是 Uri
时,BitmapDecoder
在一系列安全和完整性检查中,使用 WpfWebRequestHelper
(未记录)请求或“下载”图像。如果生成的响应流是有效文件,它会直接将流加载到新的 FileStream
中。
之后, native Windows 图像解码功能接管为您获取图像。另请注意,BitmapDecoder
已缓存,因此如果您连续加载多个图像,则无需重新初始化新的 BitmapDecoder
。我不能说这是否与您的性能问题有关。
总而言之,我猜测 WPF 在内部使用的加载图像的方法是一种高度优化的方法。我没有查看 HttpClient
的实现与可能使用的简单 HttpWebRequest
下载图像,但我怀疑您的方法的开销比内置方法的开销大,这也是导致性能下降的原因。
如果您想知道我是如何破译这些信息的,我只是检查了 PresentationCore
程序集中的 System.Windows.Media
命名空间中的几个类,使用一个名为 Reflector 的工具.
关于c# - 为什么将 XAML 图像源设置为 URI 比使用 HttpClient 获取图像更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13590844/
我想创建一个包含一堆其他 XAML 文件的主 XAML 文件。这可能吗? 最佳答案 在您的主 Xaml 中,使用 项目控件 balise 和 Xaml 组合器,您必须使用 定义您的项目用户控件 代替
如何在 xaml 中更改 ToggleSwitch 中实际开关的大小?我可以更改 OnContent 和 OffContent 的文本大小,但滑动开关永远不会更改大小。 这些都不会改变开关本身的大小,
我有一个文本 block 列表,其中可能包括里面的 url,比如: 构建失败,请在此处查看更多信息:http://... 构建成功 应用 http://myapp/无法启动,请在此处查看更多信息:ht
我想做的事 我最近一直在探索 XAML 资源字典。它们非常强大,但为了减少(甚至进一步)为适应任何修改而需要进行的更改,我想使用一些基本的算术运算来更改 HeightRequest Entry 的属性
我使用以下代码创建了一个弹出窗口,但我不知道如何将它居中 我试图在运行时自动更改边距,但我不知道该怎么做,但是有人知道如何将弹出窗口居中吗? 它没有标准维度,因为我需要全局化我的程序
哪种类型的命名更适合在 XAML 中使用: xmlns:inventoryControls="clr-namespace:Inventory.Components.Controls;assembly=
我正在尝试格式化我的 string每 3 位有逗号,如果不是整数,则为小数。我检查了大约 20 个示例,这是我最接近的示例: 但我得到一个 The property 'StringFormat' w
在 Windows Phone 8 中,我想将一个图像放在一个圆圈中。是否有类似网格的圆形容器?我知道有椭圆位它不是容器 最佳答案 这是我如何做到的。
有没有办法在 XAML 中检查逻辑非逻辑。我试图绑定(bind)到广泛使用的属性,但是对于这些新的绑定(bind),它的方式是错误的。我不想修改属性,那么有没有办法在 xaml 中反转 bool 结果
在 html 中可以说 width="20%"。这在 XAML 中当然是不允许的。有谁知道为什么会这样或者有没有办法在 XAML 中获得百分比值支持? 最佳答案 网格列定义和行定义允许比例单位(除了固
我可以动态创建 XAML 并将其弹出到我的应用程序中吗?该怎么做呢? 最佳答案 是的,这很简单: XmlReader tXml = XmlReader.Create(myXamlString); UI
简短版: 如果不使用 xamlc 预编译 xaml,应用程序中捆绑了什么以在运行时编译 xaml?它是否取决于 xamarin.forms nugets 之外的应用构建时的当前工具集? 长版: 我们有
我知道如何显示内容页面,但如何根据方向选择正确的布局。我想编写 xaml 文件:一个用于垂直方向,另一个用于水平方向。方向改变时是否可以切换xaml文件 最佳答案 Xamarin.Forms does
我是一名 Android 开发者,我是 Windows Phone 8 的新手 最近我做了一个 android 应用程序..所以我想在 Windows Phone 8 中开发具有相同 View 和相同
在库中编译 XAML 时出现以下错误: Themes\Generic.xaml(35,12): XamlCompiler error WMC0610: XBF generation error cod
我需要在几个不同的 XAML 布局文件中包含一个通用的 XAML。 我不想在其他 XAML 文件中对重复的 XAML 部分进行硬编码。 怎么做包含? 最佳答案 你能把共享代码变成UserControl
我想像这样添加一个符号: 这行不通,所以我尝试用\分隔,但也行不通。有人对我如何做到这一点有任何建议吗? 最佳答案 其实这个问题不是关于XAML的,它只是一个纯XML的问题。 XML中有些字符需要转
我在 Xaml 中定义了这样的列表。 #3599B8 #374649 #FD625E #F2C80F
在向 Microsoft 报告之前,我想在这里问一下。我有一个问题,我无法看到我的 WinUI 3 应用程序的实时可视化树。我什至看不到应用程序内工具栏。我可以在 WPF 和 UWP 应用程序中看到,
我已经定义了一个动画作为一个资源,当通过这样的 EventTrigger 调用时它可以工作: 然后
我是一名优秀的程序员,十分优秀!