【问题标题】:Image in custom control isn't loaded in UWP (WinUI3 preview 3 C++/WinRT)自定义控件中的图像未在 UWP 中加载(WinUI3 preview 3 C++/WinRT)
【发布时间】:2021-05-09 20:54:14
【问题描述】:

我在 WinUI3 中关注自定义控件(模板)上的 Microsoft tutorial,并决定摆弄它们(我是 WinUI 的新手)。我一直在尝试构建一个Image Card 控件,但似乎无法从应用文件夹加载我的图像。

来自MainPage.xaml 的标记(只是控件):

<local:BasicCard ImgSrc="Assets/woah.jpg" Title="Title here" Content="Content Here"/>

控件的样式默认在Themes/Generic.xaml,下面是相关的标记:

<ImageBrush.ImageSource>
     <BitmapImage UriSource="{Binding Path=ImgSrc, RelativeSource={RelativeSource TemplatedParent}}" />
</ImageBrush.ImageSource>

现在,如果我为 ImgSrc 属性使用超链接似乎可以正常工作,但我无法使用本地图像文件(在 Assets 文件夹中)将其拉出。此外,同样的事情在桌面应用程序中也可以正常工作,但前提是我使用绝对路径,而在 UWP 应用程序中,根本没有任何作用(除了 https 链接)。我已将 woah.jpg 文件放在所有文件夹中,并测试了 Themes/woah.jpgwoah.jpg 等模式,甚至是绝对路径,也没有任何效果。我究竟做错了什么?任何帮助将不胜感激,如果需要,请索取完整的标记 sn-ps。

最后,我不知道这是否重要,但我目前正在将该物业注册为winrt::hstring 像这样:

Microsoft::UI::Xaml::DependencyProperty BasicCard::m_ImageSourceProperty =
    Microsoft::UI::Xaml::DependencyProperty::Register(
        L"ImgSrc",
        winrt::xaml_typename<winrt::hstring>(),
        winrt::xaml_typename<TitleBarPlease::BasicCard>(),
        NULL
    );

【问题讨论】:

  • 我相信你需要使用ms-appx协议访问应用包中的资源,即ImgSrc="ms-appx:///Assets/woah.jpg"。您还必须确保相应的资源确实已添加到应用程序包中。
  • 是的,我已经尝试过您建议的 URL,但该图像不是项目的一部分。谢谢回复。任何想法如何以这种方式提供传入的图像?就像用户上传了一张图片,它不会是包的一部分,对吧?希望我说得通
  • Uri 类型支持多种协议。 URI schemes that are specific to a Windows Runtime app 描述了它们。对于动态添加的资源,您可以使用ms-appdata 而不是ms-appx
  • ms-appdata 是我需要的,感谢您的回复,非常感谢您抽出时间帮助像我这样的菜鸟

标签: xaml uwp c++-winrt winui-3


【解决方案1】:

IInspectable 正确地指出图像需要成为包的一部分,奇怪的是不是默认情况下包含 Assets 文件夹中的所有资源,右键单击图像,然后选择“包含在项目中”解决了这个问题(VS 2019)。

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 2011-07-08
    相关资源
    最近更新 更多