Невозможно изменить размер WebControl с атрибутом Designer в конструкторе Visual Studio 2008/2010. - PullRequest
0 голосов
/ 13 января 2012

У нас есть подкласс WebControl, который украшен атрибутом Designer и отображает изображение в GetDesignTimeHtml.Он построен с использованием VS 2008 Sp1.В VS 2005, когда он помещается в панель инструментов и перетаскивается на страницу aspx в режиме конструктора, он ведет себя просто отлично.Однако как в VS 2008 Sp1, так и в VS 2010 Sp1 размер изображения нельзя изменить в режиме разработки.Я воссоздал проблему, используя следующий код:

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);    
            }    
        }    
    }    
}    

1 Ответ

0 голосов
/ 24 января 2012

Кажется, что возвращаемое img строго не интерпретируется как html.Обратите внимание, что возвращение следующего в GetDesignTimeHtml действительно работает:

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