"<Button Content="按钮"/>"和"<Button>按钮</Button>"的区别
对于 WPF,可以为类型指定 ContentPropertyAttribute 特性,语法是这样的:
[ContentProperty(Name = "Content")]
public class Button
{
public object Content { get; set; }
}
这段代码表示,在 Xaml 中使用这个类型的时候,以 Content 属性为 Xaml 内容属性,就会造成你描述的效果。
而内容属性的含义就是在 Xaml 中,哪个属性可以直接表示该元素的内容。
<Button Content="Click Me!"/>
<Button>
<Button.Content>
Click Me!
</Button.Content>
</Button>
<Button>
Click Me!
</Button>
这三种表达方式都是等价的。
<Button>content</Button>
这种方法具有良好的可扩展性,原因是其中的内容作为一个元素而不是属性出现,可以有:
<Button>
<StackPanel>
<Image/>
<Label>...</Label>
...其他控件
</StackPanel>
</Button>
这种内容控件经典的用法。
这是 XAML 的不同语法。
https://docs.microsoft.com/zh...
特性语法 (属性)
<Button Background="Blue" Foreground="Red" Content="This is a button"/>
属性元素语法
<Button>
<Button.Background>
<SolidColorBrush Color="Blue"/>
</Button.Background>
<Button.Foreground>
<SolidColorBrush Color="Red"/>
</Button.Foreground>
<Button.Content>
This is a button
</Button.Content>
</Button>
集合语法
<LinearGradientBrush>
<LinearGradientBrush.GradientStops>
<!-- no explicit new GradientStopCollection, parser knows how to find or create -->
<GradientStop Offset="0.0" Color="Red" />
<GradientStop Offset="1.0" Color="Blue" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
XAML 内容属性
<Border>
<TextBox Width="300"/>
</Border>
等效于:
<Border>
<Border.Child>
<TextBox Width="300"/>
</Border.Child>
</Border>
没有太大区别,写到属性可以绑定,写到标签内方便对Button布局进一步控制。