VS XAML设计器如何知道什么时候自动填充某些值?

3
在上面的XAML按钮定义中,FontStyle属性被设置为Italic。设计师在我按下等号时会弹出一个列表供我选择。这是如何实现的呢?
在回答之前,请注意FontStyle属性是FontStyle类型(一个结构体),而不是枚举。如果是枚举,在设计时列出所有选项将是微不足道的,那么这个下拉列表的有效选项是如何选择的呢?此外,还有一个完全独立的FontStyles类,其中包含三个静态字段:ItalicNormalOblique,这恰好是VS提供的三个选项。是否在FontStyle结构体和FontStyles类之间进行了某种映射?因为我已经在对象浏览器和.NET Reflector中寻找了很多地方,但没有从任何一个地方找到答案。
谢谢!

哇,这很奇怪。通常我会说这是由于 TypeConverter.GetStandardValues,但是 FontStyleConverter 没有覆盖 GetStandardValuesGetStandardValuesSupported。非常奇怪。 - itowlson
2个回答

1

XAML 语言服务使用类型转换器的 GetStandardValues() 方法来确定在下拉列表中显示哪些内容。例如,属性网格也是这样做的。

不幸的是,框架提供的类型转换器并不总是实现 GetStandardValues() 方法,因此设计师通常会为许多这样的类型提供内部替代品。属性网格和 XAML 语言服务使用这些内部替代品。


有趣的是,这讲得通。感谢您的回答! - Mark Carpenter

0
我没有答案,但有一件有趣的事情是,有一个内部的 FontStyle 枚举。MS.Internal.Text.TextInterface.FontStyle 被定义为:
internal enum FontStyle
{
    Normal,
    Oblique,
    Italic
}

这可能是暴露给设计师用于智能感知的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接