在下面的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设置为Content,并且完全不使用模板:
<Label HorizontalAlignment="Center">
<StackPanel Orientation="Horizontal" Width="100">
<TextBlock Text="{Binding RecordCount}"/>
<TextBlock Text=" Cars"/>
</StackPanel>
</Label>
ContentTemplate用于呈现内容。由于它为null,因此在实例化模板时,DataContext为null。 TextBlocks仍会创建,因此会渲染Cars,但null没有RecordCount属性,因此第一个文本块将不显示任何文本。
另外,如果仅使用两个TextBlocks连接文本,则可以在.NET 3.5 SP1或更高版本中使用StringFormat属性:
<Label Content="{Binding RecordCount}" ContentStringFormat="{}{0} Cars"/>
关于wpf - 在Label.ContentTemplate中绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3595512/