好的,这可能是一个天真的问题,但是我想针对多个枚举的属性获取IntelliSense建议。好。金田但让我解释一下。
我有几个这样的枚举
public static class Icons
{
public enum Regular { /* ... */ }
public enum Solid{ /* ... */ }
public enum Brands { /* ... */ }
}
public enum Styles { /* ... */ }
现在我得到了带有两个DependencyProperties的XAML控件
public static readonly DependencyProperty MyStyleProperty = DependencyProperty.Register(nameof(MyStyle), typeof(Styles), typeof(Icon), new FrameworkPropertyMetadata(Styles.None, FrameworkPropertyMetadataOptions.AffectsRender, OnUpdateControl));
public static readonly DependencyProperty MyIconProperty = DependencyProperty.Register(nameof(MyIcon), typeof(object), typeof(Icon), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender, OnUpdateControl));
Control.Style
接受枚举Styles
中的值。
Control.Icon
接受值Icons.[Regular, Solid, Brands]
。
Icon
的IntelliSense建议取决于所选的Style
。因此,如果Control.Style
为Styles.Regular
,则在Icons.Regular
上仅显示关于Control.Icon
的建议。
答案 0 :(得分:0)
从理论上讲,可以添加一个CompletionProvider
来允许Intellisense处理您的单个班级,但是对于这样一个常见问题而言,这太过分了。而是使用枚举类或类别类。
枚举类(由于构造函数是公共的,所以不完全是,但是在这种情况下,将其打开似乎是合乎逻辑的):
public sealed class IconImage
{
public Uri ImageUri { get; }
public IconImage(Uri imageUri)
{
this.ImageUri = imageUri;
}
public static class ApplicationActions
{
public readonly IconImage Save = new IconImage(new Uri("foo"));
public readonly IconImage Open = new IconImage(new Uri("foo"));
public readonly IconImage Print = new IconImage(new Uri("foo"));
}
public static class Marks
{
public readonly IconImage Check = new IconImage(new Uri("foo"));
public readonly IconImage Tickbox = new IconImage(new Uri("foo"));
public readonly IconImage CheckedTickbox = new IconImage(new Uri("foo"));
}
// ...
}
// Usage: control.Icon = IconImage.Marks.TickBox;
// XAML (without TypeConverter): Icon="{x:Static local:IconImage.Marks.TickBox}"
// XAML (with TypeConverter): Icon="Marks.TickBox"
类别:
public enum IconImage
{
Save, Open, Print,
Check, Tickbox, CheckedTickbox,
// ...
}
public static class IconImages
{
public static class Application
{
public static readonly IconImage
Save = IconImage.Save,
Open = IconImage.Open,
Print = IconImage.Print;
}
public static class Marks
{
public static readonly IconImage
Check = IconImage.Check,
Tickbox = IconImage.Tickbox,
CheckedTickbox = IconImage.CheckedTickbox;
}
// … other category classes …
}
// Usage: control.Icon = IconImage.Print -- or -- control.Icon = IconImages.Application.Print
// XAML: Icon="Print" -- or -- Icon="{x:Static local:IconImages.Application.Print}"
无论采用哪种方法,我建议使用T4或XSLT之类的工具动态生成代码。尝试手动维护大型列表时,引入错误非常容易。