2012-01-13 84 views
0

我們有一個用Designer屬性裝飾並在GetDesignTimeHtml中顯示圖像的子類別WebControl。它使用VS 2008 Sp1構建。在VS 2005中,當放置在工具箱中,並在設計模式下拖入aspx頁面時,它表現得很好。但是,在VS 2008 Sp1和VS 2010 Sp1中,圖像無法在設計模式下調整大小。我已經使用以下代碼重新創建了該問題:使用Designer屬性裝飾的WebControl無法在Visual Studio 2008/2010設計器中調整大小設計師

using System;  
using System.ComponentModel;  
using System.Security.Permissions;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
using System.Web.UI.Design.WebControls;  
using System.ComponentModel.Design;  

using System.Collections;  
using System.Configuration;  
using System.Web.Configuration;  
using System.Web.UI.Design;  
using System.Text;  
using System.Reflection;  
using System.Windows.Forms;  
using System.Drawing;  

namespace Samples.AspNet.CS.Controls  
{  
    [  
    Designer(typeof(WelcomeLabelDesigner)),  
    DefaultPropertyAttribute("ID"),  
    ToolboxBitmap(typeof(WelcomeLabel), "Samples.AspNet.CS.Controls.WecomeLabel"),  
    ToolboxData("<{0}:WelcomeLabel runat=\"server\" Height='256px' Width='256px' > </{0}:WelcomeLabel>")  
    ]  
    public class WelcomeLabel : WebControl  
    {  
     [  
     Bindable(true),  
     Category("Appearance"),  
     DefaultValue(""),  
     Description("The welcome message text."),  
     Localizable(true)  
     ]  

     public virtual string Text  
     {  
      get  
      {  
       string s = (string)ViewState["Text"];  
       return (s == null) ? String.Empty : s;  
      }  
      set  
      {  
       ViewState["Text"] = value;  
      }  
     }  

     protected override void RenderContents(HtmlTextWriter writer)  
     {  
      writer.Write("Testing how the App_Code directory works.<br>");  
      writer.WriteEncodedText(Text);  
      if (Context != null)  
      {  
       string s = Context.User.Identity.Name;  
       if (s != null && s != String.Empty)  
       {  
        string[] split = s.Split('\\');  
        int n = split.Length - 1;  
        if (split[n] != String.Empty)  
        {  
         writer.Write(", ");  
         writer.Write(split[n]);  
        }  
       }  
      }  
      writer.Write("!");  
     }  
    }  

    internal class WelcomeLabelDesigner : ControlDesigner  
    {  
     protected WelcomeLabel parentControl;  

     public override void Initialize(IComponent component)  
     {  
      base.Initialize(component);  

      if (component is WelcomeLabel)  
      {  
       parentControl = (WelcomeLabel)component;  
      }  
     }  

     public override string GetDesignTimeHtml()  
     {  
      try  
      {  
       StringBuilder sb = new StringBuilder();  
       String url = parentControl.Page.ClientScript.GetWebResourceUrl(this.GetType(), "Samples.AspNet.CS.Controls.resources.images.WelcomeLabel.bmp");  
       sb.Append("<img alt=\"background image\" src=\"" + url + "\" height=\"" + parentControl.Height + "px\" width=\"" + parentControl.Width + "px\"/>");  
       return sb.ToString();  
      } catch (Exception ex)  
      {  
       // Display the error in VS.net, in Design view  
       return String.Concat("<h3>Error</h3>Stack Trace:<br>", ex.StackTrace + " " + ex.Message + " " + ex.InnerException);  
      }  
     }  
    }  
}  

回答

0

似乎返回的img不嚴格解釋爲html。請注意,在GetDesignTimeHtml中返回以下內容確實有效:

sb.Append("<img alt=\"background image\" src=\"" + url + "\" Height=\"" + parentControl.Height + "\" Width=\"" + parentControl.Width + "\"/>"); 
相關問題