2013-03-07 80 views
-1

我有一张图像,我想根据用户所做的特定选择来显示。该图像显示为PropertyGrid中的一个属性。就像这样:在PropertyGrid中隐藏图像的属性

screenshot

的问题是,我得到这一切无关的信息,包括标签的图像(System.Drawing.Bitmap)和它下面的图像属性的权利。有没有办法在最终产品中隐藏这些信息?

UPDATE:

我想这将是相关的,包括我的工作的代码。

[TypeConverter(typeof(ImagePropertiesConverter))] 
public Image Unsupported 
{ 
    get 
    { 
     Image image = MyProject.Properties.Resources.Unsupported; 
     return image; 
    } 
} 

所以这个属性仅在用户选择不支持他们当前正在处理的内容时显示。正如你可以看到该属性返回一个图像。我还希望能够设置图像的标签,目前它在PropertyGrid中显示为“System.Drawing.Bitmap”。如果我能更进一步,我希望能够设置标签的背景颜色。所以“System.Drawing.Bitmap”会显示在红色背景上。我设法摆脱了子属性。

+0

如果你只是不想PropertyGrid中的你可以将图像属性通过将BrowsableAttribute设置为false来隐藏它。那是你想要的还是你想隐藏加法子属性? – SpaceghostAli 2013-03-07 16:01:47

+0

@SpaceghostAli我想隐藏子属性(所以一切在大红色的盒子,甚至标签在右边)。仅当用户在属性网格中进行特定选择时,才会显示显示图像本身的属性。 – Fam 2013-03-07 16:26:05

回答

1

您可以实现一个自定义的TypeConverter并使用TypeConverter属性标记Image属性。以here为例。

为了摆脱System.Drawing.Bitmap你使用像这样的代码重写的ConvertTo方法在您的TypeConverter:

public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) 
    { 
     if (value is Image && destinationType.Equals(typeof(string))) 
     { 
      return "Text to replace System.Drawing.Bitmap"; 
     } 
     else 
     { 
      return base.ConvertTo(context, culture, value, destinationType); 
     } 
    } 
+0

这正是我想要做的,非常感谢你!我只有一个问题。我仍然无法摆脱标签(System.Drawing.Bitmap)。那可能吗? – Fam 2013-03-07 16:53:32

+0

是的,你可以但我不记得具体如何,我认为你需要覆盖TypeConverter中的ConvertToString方法。我将不得不挖掘一些旧代码,以获取详细信息以添加到我的回答中 – SpaceghostAli 2013-03-07 17:02:49

+0

谢谢,我热切地等待您的回复,因为我自己搜索Google。 :P – Fam 2013-03-07 17:18:14