Wpf 动态XAML加载和外部图像和字体

Wpf 动态XAML加载和外部图像和字体,wpf,xaml,Wpf,Xaml,我有以下目录结构: 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

我有以下目录结构:

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>
视频显示了,但图像没有显示。如何让图像显示,为什么视频显示而图像不显示

编辑: 我知道行和网格是如何工作的。我知道在这个场景中,视频将位于图像的顶部。我想问的是:为什么视频会出现而图像不会出现。它们的来源完全相同

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

这适用于图像和视频,但不适用于字体:
pack://siteoforigin:,,,/assets/font/intelclear/#英特尔Clear Pro


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

由于将它们添加到同一个网格中,
MediaElement
将最终位于
Image
元素的顶部

您应该使用两行定义,并将
MediaElement
Grid.Row
附加属性设置为1,以将其放置在
图像下的第二行上:

<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中执行,那么它工作得非常好。当你动态加载它的时候,也就是开始发生这种情况的时候。如果你使用XAML文件目录中的相对路径,并且你使用XamlReader动态加载它,那么它应该可以工作。根据我的回答,加载方法……也不起作用。试试看--创建那个目录结构,然后按我在代码中的方式加载它。除了“pack”格式外,任何东西都不适用于图像。对于具有相对路径的字体,没有什么是有效的。我已经完成了这项工作(字体除外),并且它确实有效。
<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>