此XAML来源:
<TextBlock Margin="10,0,0,0" FontSize="16" />
根据ILSpy,已编译为BAML:
<TextBlock Margin="10,0,0,0" TextBlock.FontSize="16" />
我可能是错的,但似乎BAML版本使用附加的属性语法而不是属性语法(例如用于Margin
)。
我发现:
TextBlock.FontSize
不是附加属性,它只是常规属性 依赖属性
这可能与MSDN有点矛盾:
此依赖项属性还具有附加的属性用法。在XAML中, 用法是,其中object是 一个对象中包含的对象元素(通常是流元素) TextBlock [...]
BAML中Margin
和FontSize
赋值之间的语法差异的正确解释是什么?
答案 0 :(得分:1)
看看reference source。有:
public static readonly DependencyProperty FontSizeProperty =
TextElement.FontSizeProperty.AddOwner(typeof(TextBlock));
public double FontSize
{
get { return (double)GetValue(FontSizeProperty); }
set { SetValue(FontSizeProperty, value); }
}
TextElement.FontSizeProperty
的定义如下:
public static readonly DependencyProperty FontSizeProperty =
DependencyProperty.RegisterAttached(
"FontSize",
typeof(double),
typeof(TextElement),
new FrameworkPropertyMetadata(
SystemFonts.MessageFontSize,
FrameworkPropertyMetadataOptions.AffectsMeasure |
FrameworkPropertyMetadataOptions.AffectsRender |
FrameworkPropertyMetadataOptions.Inherits),
new ValidateValueCallback(IsValidFontSize));
因此,虽然不应将FontSize
用作附加属性,但通过在附加属性的标识符字段上调用AddOwner
来初始化其标识符字段。
这只是我的猜测,但我认为从这方面来看,TextBlock.FontSize
被视为附加属性。