我有一个数据模板,并尝试将其应用于列表框,我在模板上有文本框,标签和按钮,但它没有显示在列表框上,我没有任何数据绑定但仍然它必须显示文本框,标签,按钮但它不会显示, 这是datatemplate的代码,它被用作资源
<Window.Resources>
<DataTemplate x:Key="tasktemplate1">
<Canvas Height="50" Width="850" Background="lightgray">
<Label Height="30" Width="170" Canvas.Top="10" Canvas.Left="150" Background="LightGray">
</Label>
<TextBox Height="30" Width="60" Canvas.Top="10" Canvas.Left="370" Background="Black"></TextBox>
<Label Canvas.Left="500" Canvas.Top="10">$</Label>
<Button Click="deletebuttonclick" Canvas.Top="12" Height="10" Width="30" Canvas.Left="600" ></Button>
</Canvas>
</DataTemplate>
</Window.Resources>
和我的列表框的代码
<TabItem>
<Canvas Height="700" Width="850">
<ListBox ItemTemplate="{StaticResource tasktemplate1}" ItemsSource="{Binding}" x:Name="listBox" Height="700" Width="850">
</ListBox>
<Label Canvas.Top="-18" Canvas.Left="185">Select Task</Label>
<Label Canvas.Top="-18" Canvas.Left="377" RenderTransformOrigin="0.58,0.462">Enter Bill Rates</Label>
<Button Canvas.Left="39" Canvas.Top="575" Width="139">Click to add the task</Button>
</Canvas>
</TabItem>
我哪里出错了?任何帮助,比x
答案 0 :(得分:1)
DataTemplate用于表示listBoxItems的可视布局。但是, ItemsSource集合为null或count为0 ,(假设因为您将其设置为Binding)因此不会生成任何项目并显示在listBox中。您需要传递ItemsSource及其中的一些对象,以便将DataTemplate应用于ListBoxItems。
对于测试,您可以在XAML中定义ItemsSource:
<Canvas Height="700" Width="850">
<Canvas.Resources>
<ObjectDataProvider x:Key="EnumerableRange"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:linq="clr-namespace:System.Linq;assembly=System.Core"
ObjectType="{x:Type linq:Enumerable}" MethodName="Range">
<ObjectDataProvider.MethodParameters>
<sys:Int32>1</sys:Int32>
<sys:Int32>10</sys:Int32>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Canvas.Resources>
<ListBox ItemTemplate="{StaticResource tasktemplate1}"
ItemsSource="{Binding Source={StaticResource EnumerableRange}}"
x:Name="listBox" Height="700" Width="850"/>
......
</Canvas>
在上面的示例中,我基本上提供了一个整数集合,其中有10个项目作为ItemsSource。因此,您将看到10个模板。如果您想要查看更多项目,请将资源中的数字从10更新为资源 EnumerableRange
中的其他值。