我要提前进行aplogize因为我真的处于对此的理解极限,所以如果我不解释这个......很抱歉......
无论如何,我正在尝试创建一个具有复杂属性的asp.net服务器控件,可以使用intellisense设置。因此,作为一个例子,我将使用汽车,因此服务器控件可能被称为汽车,当我实际在webform上实现控件时,我想设置复杂的分层属性,例如:
<Control:Car Color="Paint.Metalic.CandyRed"
Wheels="Forged.Aluminun.FiveSpoke.GunMetal" />
或
<Control:Car Color="Paint.Matte.Yellow"
Wheels="Forged.Steel.SevenSpoke.BareMetal" />
我尝试在服务器控件中创建公共属性,这些属性只是指向基类的类型/类,但智能感知没有提供任何东西。我可以使用一个直接的枚举,这将显示,但我不能做任何分层的方式。我一直在寻找例子,但我似乎找不到任何东西。任何帮助将不胜感激!!!!
谢谢!
一个不同的例子怎么样,看起来项目之间的关系或它们的预期价值虽然完全不重要,但似乎是一个问题。
让我们看看大陆/国家/州/城市/等之间的关系....通过这个例子,如果我的自定义服务器控件被称为“位置”,那么我希望能够......
<Control:Location CurrentLocation="UnitedStates.Nebraska.Lincoln" />
或
<Control:Location CurrentLocation="Europe.Italy.Napoli" />
答案 0 :(得分:9)
你的问题比前两个答案更糟糕:你不知道你在做什么。
很抱歉听起来如此刺耳,但是你在哪里看到像“Paint.Metalic.CandyRed”这样的东西,它在那里意味着什么?还是“Forged.Aluminun.FiveSpoke.GunMetal”?你甚至想要那是什么意思?
首先,找出你想要表达的内容。然后,创建一个可以表示它的类。然后,将该类的属性添加到服务器控件。您可能必须添加TypeConverter或其他设计器支持,以便ASP.NET将您首选的文本表示转换为类的实例。否则,您将能够获得类似Font的属性。
我将猜测这些值中的一些代表什么,并尝试向您展示如何在控件中处理它们。不过,我的猜测可能很遥远。
我将使用“Paint.Metalic.CandyRed”。我认为这适用于汽车定制领域,并且Color属性用于表示整体赋予汽车的饰面。在这种情况下,“油漆”可能是enum
指的是完成的类型(虽然我不知道其他类型的饰面适用于汽车!)。我知道,在我小时候制作模型车时,油漆可能是金属色,光泽度或平坦色,所以这三个将是一个枚举的枚举值。 “CandyRed”将是众多颜色中的一种。这将是这样的:
public enum FinishType
{
Paint,
NotPaint // _I_ don't know!
}
public enum PaintFinish
{
Metallic,
Gloss,
Flat
}
public enum CarColor
{
CandyRed,
SilverMist,
DesertSandMica,
MagneticGray,
// etc.
}
public class CarFinish
{
public FinishType FinishType {get;set;}
public PaintFinish PaintFinish {get;set;}
public CarColor CarColor {get;set;}
}
public class Car : WebControl
{
public CarFinish Color {get;set;}
}
这将允许这样的事情:
<Control:Car Color-FinishType="Paint"
Color-PaintFinish="Metallic"
Color-CarColor="CandyRed" .../>
或者这个:
<Control:Car ...>
<Color FinishType="Paint" PaintFinish="Metallic" CarColor="CandyRed"/>
</Control:Car>
答案 1 :(得分:0)
这些项目需要是枚举,因为这是至少在我看到的所有内容中得到支持的唯一方式。现在,你可以用一些枚举来完成你想要的东西。
namespace Paint
{
public enum Metalic
{
CandyRed
}
public enum Matte
{
Yellow
}
}
当然,不完美,但易于记录和理解!
答案 2 :(得分:0)
正如Mitchel Sellers所说,他们需要成为Enum或Constants / Statics。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace Paint
{
public class Metallic
{
public static Color CandyRed
{
get { return Color.Red; }
}
public static Color CandyGreen
{
get { return Color.Green; }
}
}
public class Matte
{
public static Color Red
{
get { return Color.Red; }
}
public static Color Green
{
get { return Color.Green; }
}
}
}