在下面的 Xaml 中,第一个控件(TextBlock 本身)在绑定(bind)和呈现 RecordCount 的值时没有问题。但在第二个控件(带有 ContentTemplate 的 Label)中,RecordCount 的值未呈现。然而,字面的“汽车”渲染得很好。所以我知道 ContentTemplate 正在工作,但从 ContentTemplate 内部到 RecordCount 的绑定(bind)却不起作用。我做错了什么?
<TextBlock Text="{Binding RecordCount}"/>
<Label HorizontalAlignment="Center" >
<Label.ContentTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Width="100">
<TextBlock Text="{Binding RecordCount}"/>
<TextBlock Text=" Cars"/>
</StackPanel>
</DataTemplate>
</Label.ContentTemplate>
</Label>
最佳答案
将 Label 上的 Content 属性设置为当前的 DataContext:
<Label HorizontalAlignment="Center" Content="{Binding}">
或者,将 StackPanel 设置为内容并且根本不使用模板:
<Label HorizontalAlignment="Center">
<StackPanel Orientation="Horizontal" Width="100">
<TextBlock Text="{Binding RecordCount}"/>
<TextBlock Text=" Cars"/>
</StackPanel>
</Label>
ContentTemplate 用于呈现内容。由于它为 null,因此在实例化模板时 DataContext 也为 null。 TextBlock 仍会被创建,因此 Cars 会被渲染,但 null 没有 RecordCount 属性,因此第一个文本 block 会渲染为没有文本。
此外,如果您仅使用两个 TextBlock 来连接文本,则可以使用 .NET 3.5 SP1 或更高版本中的 StringFormat 属性:
<Label Content="{Binding RecordCount}" ContentStringFormat="{}{0} Cars"/>
关于wpf - 在 Label.ContentTemplate 中绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3595512/