【问题标题】:Dynamic XAML load and external images and fonts动态 XAML 加载和外部图像和字体
【发布时间】:2017-02-08 03:07:38
【问题描述】:

我有这个目录结构:

c:\app\program.exe
c:\app\assets\layout.xaml
c:\app\assets\videos\video.mp4
c:\app\assets\image\image.png

layout.xaml 包含:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Image Source="assets/image/image.png" />
    <MediaElement Source="assets/videos/video.mp4" />
</Grid>

我使用加载layout.xaml

using (var sr = new StreamReader(@"c:\app\assets\layout.xaml"))
{
    var pnl = (Panel)XamlReader.Load(sr.BaseStream);
    SomeOtherGrid.Children.Add(pnl);
}

视频会显示,但图像不会。如何让图像显示,为什么视频显示而图像不显示?

编辑: 我知道行和网格是如何工作的。我知道在这种情况下视频将位于图像之上。我要问的是:为什么视频显示而图像不显示。它们的来源完全相同。

编辑 2: 显然,您必须对外部资源使用这种荒谬的“打包”格式: pack://siteoforigin:,,,/assets/videos/video.mp4

这适用于图像和视频,但不适用于字体: pack://siteoforigin:,,,/assets/fonts/intelclear/#Intel Clear Pro

他们为什么把这件事弄得如此复杂?如果是相对路径,为什么不直接从二进制文件的根目录加载?

【问题讨论】:

  • 如果您使用 XAML 文件 目录中的相对路径,它应该可以工作,根据我的回答,您使用 XamlReader.Load 方法动态加载...跨度>
  • 也不起作用。试试看——制作那个目录结构并按照我在你的代码中的样子加载它。除了“打包”格式外,没有任何东西适用于图像。 nothing 适用于具有相对路径的字体。
  • 我已经这样做了(字体除外)并且确实有效。

标签: wpf xaml


【解决方案1】:

MediaElement 最终将位于 Image 元素之上,因为您将它们添加到同一个网格中。

您应该使用两个 RowDefinition 并将 MediaElement 的附加属性 Grid.Row 设置为 1 以将其放在 Image 下方的第二行:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Image Source="image/image.png" />
    <MediaElement Source="videos/video.mp4" Grid.Row="1" />
</Grid>

如果您发布的示例路径正确,您还应该从路径中删除尾随的“资产”。来自Layout.xaml 的图片的相对路径是“image.png”。

【讨论】:

  • 我知道所有的行定义和事情。我在问为什么视频显示而图像没有。即使我添加了行之类的,图像仍然不会显示,但视频会。
  • 它按预期工作。请仔细检查您的路径。例如,您确定该文件夹名为“image”而不是“images”吗?只有你能说出来。你只有一个“视频”文件夹吗?
  • 如何加载 XAML?如果您从 EXE 作为静态资源执行此操作,则效果很好。当你动态加载它时,它就开始发生了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 2011-11-09
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
相关资源
最近更新 更多