【问题标题】:Disable property on Visual Studio Properties Panel禁用 Visual Studio 属性面板上的属性
【发布时间】:2011-04-21 08:45:58
【问题描述】:

我是 wpf 的新手。我目前正在开发自定义控件,并且我希望从 xaml 严格定义某些属性。我想要实现的示例是 Effect 属性,它只显示“必须在 XAML 中设置值”文本。有人可以告诉我该怎么做,或者我应该使用哪个属性?提前致谢

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    如果你想在属性面板中隐藏属性,你可以使用 BrowsableAttribute 来实现:

    BrowsableAttribute Class

    视觉设计器通常会在“属性”窗口中显示那些没有可浏览属性或使用值为 true 的 BrowsableAttribute 构造函数标记的成员。这些成员可以在设计时进行修改。 使用值为 false 的 BrowsableAttribute 构造函数标记的成员不适用于设计时编辑,因此不会显示在可视化设计器中。默认为真。

    [Browsable(false)]
    public int HiddenProperty {
        get {
            // Insert code here.
            return 0;
        }
        set {
            // Insert code here.
        }
    }
    

    【讨论】:

    • 将 Browsable 设置为 false 将使其完全隐藏,这意味着在使用设计器时,用户可能不知道它的存在。我想让它仍然显示在属性面板上,但用户必须输入 XAML 代码来设置值。
    • 好的。然后,您将需要使用另一个属性来更改在“属性面板”中编辑属性时将使用的设计器。我过去使用过它,但现在我无法访问该代码库并找到它的名称。
    • 我无法在代码中检查它,但据我记得 TypeDescriptionProviderAttribute 和 CustomTypeDescriptor 的组合是可行的方法。
    【解决方案2】:

    你需要依赖属性

    http://msdn.microsoft.com/en-us/library/ms752914.aspx

        public static readonly DependencyProperty IsSpinningProperty = 
        DependencyProperty.Register(
        "IsSpinning", typeof(Boolean),...);
    
    public bool IsSpinning
    {
        get { return (bool)GetValue(IsSpinningProperty); }
        set { SetValue(IsSpinningProperty, value); }
    }
    

    或者简单地将效果添加到新控件的 xaml 中:

    <local:NewControl>
        <local:NewControl.Effect>
            <DropShadowEffect/>
        </local:NewControl.Effect>
    </local:NewControl>
    

    【讨论】:

    • 我正在使用 DependencyProperty。我想要实现的是让用户无法通过 Visual Studio 属性面板编辑其值。
    猜你喜欢
    • 1970-01-01
    • 2011-09-23
    • 2022-10-17
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多