【问题标题】:How does the Visual Studio Intellisense know how to list predefined brushes for Brush type properties in WPF XAML?Visual Studio Intellisense 如何知道如何为 WPF XAML 中的画笔类型属性列出预定义画笔?
【发布时间】:2021-03-17 12:37:26
【问题描述】:

当通过 XAML 在 WPF 项目中引用 Brush 类型的属性时,智能感知会从一组预定义的 Brush 对象中显示可能的选择列表。有趣的是,这个列表来自一个完全不同的类。这个预定义的 Brush 对象列表实际上来自一个名为 Brushes 的类。每个预定义的 Brush 都是 Brushes 类型的静态只读属性。包含与 Brush 类型本身关联的预定义 Brush 对象的 Brushes 类如何?我怎样才能为我自己的自定义类型复制这种行为?

我希望能够使用预定义的选项定义我自己的类型,同时让智能感知提供与 Brush 类型一样的选项。

为了澄清,我想知道如何为我可能创建的任何自定义类型复制 intellisense 行为。当您尝试在 WPF 中为 UIElement 的 Background 属性赋值时,智能感知会为您提供预定义的 Brush 对象的选择,因为 Background 属性的数据类型是 Brush 类型。

如果我决定创建一个自定义类型的属性。假设属性名称是 Location,它的类型是 Country。我有另一个名为 Country 的静态类,在 Country 类中,有代表不同国家/地区的静态只读属性。这些静态属性中的每一个都返回一个 Country 对象。我希望当我尝试在 XAML 中为我的自定义对象的 Location 属性分配一个值时,它会列出 Country 类的成员,就像它对 Brushes 类所做的那样。我想知道如何为我的自定义 Country 类型获取这种智能感知行为。

【问题讨论】:

    标签: wpf visual-studio xaml intellisense


    【解决方案1】:

    您可以通过创建附加的 DependencyProperty 来实现它,该类型是您的自定义枚举类型,这是我的演示代码:

    class CountryManager : DependencyObject
    {
        public static CountryEnum GetCountry(DependencyObject obj)
        {
            return (CountryEnum)obj.GetValue(CountryProperty);
        }
    
        public static void SetCountry(DependencyObject obj, CountryEnum value)
        {
            obj.SetValue(CountryProperty, value);
        }
    
        public static readonly DependencyProperty CountryProperty =
            DependencyProperty.RegisterAttached("Country", typeof(CountryEnum), typeof(CountryManager), new PropertyMetadata(CountryEnum.Country1));
    }
    
    public enum CountryEnum
    {
        Country1,
        Country2,
        Country3,
        Country4,
        Country5,
        Country6,
        Country7,
        Country8,
        Country9
    };
    

    如下图所示使用它:

    【讨论】:

    • 我知道枚举是这样工作的,但 emum 类型本质上是一个整数。例如,控件的背景属性是画笔。它不是枚举类型。不知何故,他们让 Visual Studio 智能感知将 Brush 类型视为枚举类型。仍然感谢您的努力xd
    • Horizo​​ntalAlignment 使用枚举类型,而 Background,BorderBrush 在 XAML 智能感知行为中包含 Converter。
    • 我不认为转换器对智能感知行为负责。
    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2011-03-19
    相关资源
    最近更新 更多