我在ListView的每个itme中显示一个图像。我希望图像水平居中,也可以垂直居中。我的代码如下:
Protected Sub MembersLV_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles MembersLV.ItemDataBound
If e.Item.ItemType = ListViewItemType.DataItem Then
Dim LogoImage As System.Web.UI.WebControls.Image = e.Item.FindControl("LogoImage")
Dim LogoLink As HtmlControl = e.Item.FindControl("LogoLink")
Dim di As ListViewDataItem = DirectCast(e.Item, ListViewDataItem)
Dim ImageFileName As String = di.DataItem("FileName")
Dim FilePath As String = String.Format("/Uploads/MembersDirectory/w125h85/{0}", ImageFileName)
If File.Exists(Server.MapPath(FilePath)) Then
LogoImage.ImageUrl = FilePath
Dim BoxHeight As Integer = 101
Dim BoxWidth As Integer = 138
Dim B As New Bitmap(Server.MapPath(FilePath))
Dim BHeight As Integer = B.Height
Dim BWidth As Integer = B.Width
Dim PaddingTop As Integer = Math.Ceiling(BoxHeight - BHeight) / 2
Dim PaddingLeft As Integer = Math.Ceiling(BoxWidth - BWidth) / 2
LogoLink.Attributes.Add("style", String.Format("padding: {0} 0 0 {1};", PaddingTop, PaddingLeft))
End If
End If
End Sub
我只计算图像顶部和左侧所需的填充量,使其居中,然后将该填充作为样式属性添加到周围标记中。
aspx文件中的代码如下:
<a href='<%#Eval("Website") %>' id="LogoLink" runat="server">
<asp:Image ID="LogoImage" runat="server" AlternateText='<%#Eval("Name") %>' />
</a>
当我运行此代码时,没有对<a>
标记应用填充。因此,我进行了快速检查,以确保使用PaddingTop
正确地对PaddingLeft
和Response.Write
进行了计算。奇怪的是,这次我跑的时候,样式属性出现了!但是没有Response.Write
,就没有样式属性。
我做错了什么?
答案 0 :(得分:1)
我刚刚回来再看看它。花了5分钟看着它我突然意识到我没有指定填充单位!我更改了代码:
LogoLink.Attributes.Add("style", String.Format("padding: {0} 0 0 {1};", PaddingTop, PaddingLeft))
为:
LogoLink.Attributes.Add("style", String.Format("padding: {0}px 0 0 {1}px;", PaddingTop, PaddingLeft))
这现在有效!此外,我发现style
属性实际上显示在源代码中(如果您查看页面的源代码),如果在Firebug中进行检查,那么它就不在那里,这让我不再闻到气味。我仍然不明白为什么添加Response.Write行意味着应用了style属性,所以如果有人能解释我会有兴趣知道原因。