在下面的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/

10-09 04:00