2

我将创建一个表示树视图的 Web 服务器控件。所以我想用 2 张图片来表示 + 和 - 来展开/折叠。如何以在页面上呈现时可用作图像源的方式将其构建到控件中?

由于这将位于已编译的 Web 控件库中,因此我不想依赖 Web 应用程序中的外部图像。

编辑:
根据Andre Kraemer的这个回答,我做了以下事情:

在 AssemblyInfo.vb 中:

<Assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.Resources.plus.gif", "image/gif")> 
<Assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.Resources.minus.gif", "image/gif")> 

在我的RenderContents覆盖中:

Dim lPlusImage As New WebControls.Image()
Dim lMinusImage As New WebControls.Image()
lPlusImage.ImageUrl = Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MyCompany.MyWebControls.Resources.plus.gif")
lMinusImage.ImageUrl = Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MyCompany.MyWebControls.Resources.minus.gif")
lPlusImage.RenderControl(output)
lMinusImage.RenderControl(output)

我的大会名称是MyWebControls.

我的根命名空间是MyCompany.MyWebControls.

图像plus.gifminus.gif位于名为 的文件夹中Resources,并且图像的Build Action设置为Embedded Resource

它仍然不起作用。我没有错误。我已经直接在浏览器中尝试了生成的图像 url,bot 没有任何反应,只是一个空白页面。

注意:
我尝试在资源名称中使用无效路径,结果完全一样,这让我想知道是否需要做一些特殊的事情来将实际资源映射到资源名称。仅当我在代码中使用的名称与 AssemblyInfo 中指定的名称不同时,我才会收到 404 Not Found 错误,它与指向实际资源的路径无关!

编辑:

我找到了解决方案

我发现这是 C# 和 VB 之间的区别。请参阅我自己对这个问题的回答

4

3 回答 3

4

将这两个图像添加到树视图控件项目的名为 images 的子文件夹中。然后将它们在属性网格中的构建操作从内容更改为嵌入资源。

除此之外,您必须在 assemblyinfo.cs 文件中将这两个图像注册为程序集的嵌入式资源,如下所示:

[assembly: System.Web.UI.WebResource("YourProjectsNameSpace.Images.plus.gif", "img/gif")]
[assembly: System.Web.UI.WebResource("YourProjectsNameSpace.Images.minus.gif", "img/gif")]

由于这些图像现在将嵌入到您的控件程序集中,您可以使用 ClientScriptManager 访问它们,如下所示:

string plusImageUrl  = Page.ClientScript.GetWebResourceUrl(this.GetType(), "YourProjectsNameSpace.Images.plus.gif");
string minusImageUrl  = Page.ClientScript.GetWebResourceUrl(this.GetType(), "YourProjectsNameSpace.Images.minus.gif");
于 2010-02-15T09:54:08.890 回答
2

好的,我在这篇文章中找到了答案。我认为 Andre Kraemer 是公认的答案,因为他为我指明了正确的方向。他不知道C#和VB的名字结构有细微的差别!

这是适用于 VB 的解决方案:

重要的区别是在 VB 中,文件路径不包含在名称中。

在我的示例中,项目中的根命名空间是MyCompany.MyWebControls,图像文件位于名为Resources. 在 C# 中,子文件夹是资源名称结构的一部分,但在 VB 中不是。

在 C# 中,这将是:

[assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.Resources.plus.gif", "image/gif")]

在VB中,我们必须忽略资源名称路径中的文件路径:

<Assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.plus.gif", "image/gif")> 

因此,当我们知道这一点时,我的完整示例将是:

在 AssemblyInfo.vb 中:

<Assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.plus.gif", "image/gif")> 
<Assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.minus.gif", "image/gif")> 

在我的RenderContents覆盖中:

Dim lPlusImage As New WebControls.Image()
Dim lMinusImage As New WebControls.Image()
lPlusImage.ImageUrl = Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MyCompany.MyWebControls.plus.gif")
lMinusImage.ImageUrl = Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MyCompany.MyWebControls.minus.gif")
lPlusImage.RenderControl(output)
lMinusImage.RenderControl(output)

瞧,它有效!

于 2010-03-11T10:56:53.073 回答
1

您的图像 -> 属性 -> 构建操作 -> 嵌入式资源。它将与您的控件或库一起编译。

于 2010-02-15T09:46:52.847 回答