如何让自定义 属性 出现在 属性 管理器中?

How do I get a custom property to appear in the property manager?

我正在使用 Visual Studio 2015 Community 在 C# 中使用 Windows Forms 创建一个应用程序。我创建了一个具有 public 属性和设置的自定义控件(实现一个按钮)。当我将自定义按钮添加到表单时,如何让这些自定义 properties/settings 出现在 Visual Studio 属性 管理器中?

我有私人支持者,他们通常会使用 public 访问器;

很多年前我曾经这样做过,但我忘记了如何让它出现在 属性 管理器中。默认情况下,VS 2015 和以前的版本,属性 管理器是通常设置标准控件属性的区域,位于 IDE.

这是我正在使用的属性之一的片段:

public class Spot : Button
{
    // backers for the properties
    private bool isselected = false;

    // //////////////////////////////////////////////////////////////
    // user accessable properties relying on the above backers
    //

    /// <summary>
    /// Get/Set if the spot is selected
    /// </summary>
    public bool isSelected
    {
        get
        {
            return isselected;
        }
        set
        {
            isselected = value;
        }
    }
}

希望这里有人可以帮助提醒我如何。我确实在这里做了几次搜索,通过 google,但似乎没有地方有我要找的东西。通过包含 "Property Manager" 在内的特定搜索,我得到了很多与我要查找的内容相去甚远的房地产搜索结果。

您需要使用依赖项属性。摘自 here:

// Dependency Property
public static DependencyProperty CurrentTimeProperty = 
     DependencyProperty.Register( "CurrentTime", typeof(DateTime),
     typeof(MyClockControl), new FrameworkPropertyMetadata(DateTime.Now));

// .NET Property wrapper
public DateTime CurrentTime
{
    get { return (DateTime)GetValue(CurrentTimeProperty); }
    set { SetValue(CurrentTimeProperty, value); }
}

这会给你一个新的 属性 "CurrentTime" 作为例子。

你的应该是这样的:

public static DependencyProperty SelectedProperty = 
     DependencyProperty.Register( "IsSelected", typeof(Boolean),
     typeof(Spot), new FrameworkPropertyMetadata(false));

public Boolean IsSelected
{
    get { return (Boolean)GetValue(SelectedProperty); }
    set { SetValue(SelectedProperty, value); }
}

--- 编辑,因为它适用于 WinForms:

尝试一下 here:

[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[Bindable(true)]
public bool isSelected
{
    get
    {
        return isselected;
    }
    set
    {
        isselected = value;
    }
}