自定义控件不会在设计器中公开图像属性
本文关键字:图像 属性 自定义控件 | 更新日期: 2023-09-27 17:55:39
我做了一个自定义的跟踪栏控件,主要作为一个练习。我知道我可以/应该继承我需要的东西,而不是重新发明轮子,但我在努力中学到了很多东西。现在,我有很多属性,除了几个图像属性外,所有这些属性都显示在设计器中。这就是我所拥有的,以其他工作属性为模型(那些是整数和颜色,什么不是,它们都按预期工作......),所以也许我应该以其他方式做图像。底线,我不知道我在做什么:)
编辑:我的自定义控件位于 Windows 窗体解决方案(VC# 2008 Express)中,澄清一下,我的问题是我的控件的某些属性(图像属性)在设计时未显示在属性选项卡中。
编辑 2 :在阅读了 DependencyProperty 并且完全无法理解这个概念之后(我在 programmin the codez 或你们大师所说的黑巫毒魔法方面非常菜鸟??我已经习惯了让 IDE 解决我所有的麻烦,我很高兴看到 IDE 愉快地展示我的其他属性,例如Color BarColor
、int Value
等。为什么Image LeftImage
会有所不同,许多标准控件都具有 Image 属性,也许我认为 IDE 可以解决我的所有错误是天真,但可以肯定的是,Microsoft 的家伙不会每次都必须在控件中设置图像属性时构建新的编辑器。我敢打赌,他们重用了一些东西,我也应该能够做到。
我被困住了:(
无论如何,这是我蹩脚的CoD3Z:
private Image _LeftImage;
/// <summary>
/// Sets the small image appearing to the left of the trackbar
/// </summary>
[Description("The small image appearing to the left of the trackbar"),
Category("Appearance"),
DefaultValue(typeof(Image),"null"),
Browsable(true), EditorBrowsable(EditorBrowsableState.Always)]
public Image LeftImage
{
private get { return _LeftImage; }
set
{
if (value.Height != 16 || value.Width != 16)
{
_LeftImage = new Bitmap(value,new Size(16,16));
}
else _LeftImage = value;
Invalidate();
}
}
顺便问一下,DefaultValue 和 DefaultValueAttribute 有什么区别?
感谢您的任何指示和帮助!/米凯尔
我在这里找到了一些东西:http://msdn.microsoft.com/en-us/library/system.drawing.design.imageeditor.aspx
考虑一下这个问题解决了。
对于在设计器中显示图像,您需要覆盖绘制它的 OnPaint 方法。
DefaultValue 与 DefaultValueAttribute 相同。.NET 中的所有属性都是从 System.Attribute 继承的分支,所有这些类都类似于 Name*Attribute*,其中属性是固定的。那么"默认值"就像一个别名。
您的示例没有显示您的问题到底是什么,但是如果您创建自定义控件并希望从设计器访问其属性,则应像这样使用 smth:
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(object), typeof(CustomControl),
new FrameworkPropertyMetadata(null, ValueChanged));
希望这对你有帮助