0

此 XAML 源:

<TextBlock Margin="10,0,0,0" FontSize="16" />

根据 ILSpy 编译为 BAML:

<TextBlock Margin="10,0,0,0" TextBlock.FontSize="16" />

我可能错了,但 BAML 版本似乎使用附加属性语法而不是属性语法(例如用于Margin)。

我发现:

这可能与MSDN有点矛盾:

  • 此依赖属性还具有附加属性用法。在 XAML 中,用法是 <object TextBlock.FontSize="value".../>,其中 object 是包含在 TextBlock [...] 中的对象元素(通常是流元素)。

BAML中的这种语法差异MarginFontSize赋值的正确解释是什么?

4

1 回答 1

1

看看参考源。有:

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来说被视为附属财产。

于 2019-07-13T09:20:48.550 回答