【问题标题】:Create UserControl DependencyProperty of which value can be chosen in dropdown list (as combo box)创建可以在下拉列表中选择其值的 UserControl DependencyProperty(作为组合框)
【发布时间】:2011-01-28 23:12:39
【问题描述】:

我是 WPF 的初学者,现在我想制作一个 WPF userControl 库,其中包括一个 Rating bar userControl。创建评分栏的所有步骤都已完成,但是我想添加一个属性 RatingValue:

public static readonly DependencyProperty RatingValueProperty =
            DependencyProperty.Register("RatingValue", typeof(int), typeof(RatingControl),
            new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(RatingValueChanged)));

public int RatingValue
        {
            get { return (int)GetValue(RatingValueProperty); }
            set
            {               
                SetValue(RatingValueProperty, value);                
            }
        }

private static void RatingValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
         //... change the rating value
        }

我的 UserControl 的用户可以通过 0 到 5 的值进行修改,这些值显示在属性窗口的下拉列表(组合框)中(因为用户控件的某些现有属性,如可见性、窗口样式、背景...... )

我该怎么办? 非常感谢您,

越南

【问题讨论】:

    标签: wpf combobox properties dependencies


    【解决方案1】:
    1. 创建一个派生自 TypeConverter 的类。
    2. 覆盖 GetStandardValues 和 GetStandardValuesSupported(以及可选的 GetStandardValuesExclusive)。
    3. 从 GetStandardValues 返回一个集合,其中包含您希望在组合框中显示的值。
    4. 将 TypeConverterAttribute 应用于 RatingValue 属性,指定类型转换器的类型。

    或者,根据 RatingValue 的语义,您可以考虑将其设为枚举。这感觉有点奇怪,因为这些值是数字的——但它的优点是可以在类型级别上限制值,并且它会自动为您提供一个组合框,而无需您实现类型转换器。

    【讨论】:

    • 感谢您的快速回答,但很抱歉我没有完全了解他们,您介意给我一个解决方案的例子吗?尤其是“枚举”那个,看起来很有趣也更简单:)非常感谢。
    • 枚举方法只涉及创建一个枚举类型 (public enum Rating { ... }) 并将其用作 RatingValue 属性类型而不是 int。对于类型转换器方法,请参阅msdn.microsoft.com/en-us/library/ayybcxe5.aspx(向下滚动到标题为“向属性窗口提供标准值列表的类型转换器”部分)。
    • 顺便说一句,有没有一种方法可以创建一个元素名称为数字的枚举,如下所示: public enum Rating { 1, 2, 3 ...} 而不是 { one = 1、2、3 ...}(因为他们总是要求名字...)
    • 否,但您可以为枚举值创建“友好名称”,例如使用值转换器。有关示例,请参见 codeproject.com/KB/WPF/FriendlyEnums.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2011-06-11
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多