【问题标题】:Resource URI in WPF UserControl, which is hosted in Windows Forms applicationWPF UserControl 中的资源 URI,托管在 Windows 窗体应用程序中
【发布时间】:2018-11-21 10:27:08
【问题描述】:

我有一个 WPF UserControl,它使用一些 PNG 位图资源作为其 UI 的一部分。目前,这些文件通过构建操作:内容复制到输出目录:不要复制来引用。此 UserControl 上的元素使用以下 URI 来访问资源: pack://application:,,,Resources/ui/Cross.png 在设计师中效果很好。

然后通过 ElementHost 控件在 Windows 窗体应用程序中使用用户控件,此时所有图像链接都停止工作。 UserControl 位于它自己的程序集中,而 Windows 窗体应用程序正在引用该程序集。

我也尝试将 URI 更改为:pack://application:,,,Assembly.Name;component/Resources/ui/Cross.png

我进一步尝试阅读this 没有帮助。

我剩下的唯一选择是包含代码以手动设置用户控件上所有 Image 元素的 ImageSource,这需要大量工作。我觉得一定有办法更好地解决这个问题。

【问题讨论】:

    标签: wpf xaml wpf-controls windowsformsintegration


    【解决方案1】:

    构建操作:内容和复制到输出目录:不要复制

    这种组合不起作用。 Content 要求复制文件。

    但是,您应该使用构建操作Resource。并且您的 Pack URI 在 ,,, 之后缺少一个斜杠。

    应该是

    pack://application:,,,/AssemblyName;component/Resources/ui/Cross.png
    

    假设图像文件是 Visual Studio 项目的一部分,位于名为 Resources 的项目文件夹中名为 ui 的子文件夹中。

    详情请见Resource File Pack URIs

    【讨论】:

    • 上述对图片是否加载没有影响。这是托管控件的一个已知问题,我正在寻找如何解决此问题的建议。构建操作和 uri 格式的组合无法解决此问题。
    • 不确定你想说什么,但内容和不复制肯定不能一起工作。使用构建操作资源和引用的程序集资源文件包 URI。
    • 我想说的是您提出的更改也不能解决这种情况。您不能只是玩弄构建操作和调整 URI 链接,并期望托管在 Windows 窗体应用程序中的 WPF 控件会突然工作,并且 URI 资源链接会突然活跃起来。正如 WPF 博士在问题中提供的链接中所解释的那样,整个功能在托管环境中不起作用。
    • 刚刚试了一下,效果很好。在 WinForms 应用程序的 ElementHost 中托管 WPF UserControl。 UserControl 有一个 Image 元素,其中包含从完整的 Pack URI 加载的 BitmapImage。您不应该“玩弄”构建操作和其他资源文件设置。只需正确设置它们。还要确保您的资源文件路径正确,即有一个文件夹“Resources”和一个子文件夹“ui”。
    • 还要仔细检查您在 Pack URI 中使用了正确的程序集名称。不要使用命名空间名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2021-02-14
    • 1970-01-01
    • 2013-10-01
    相关资源
    最近更新 更多