Используйте пользовательский элемент управления в качестве DataTemplate в приложении WPF - PullRequest
10 голосов
/ 11 мая 2010

Я пытаюсь создать пользовательский элемент управления в приложении WPF, который будет служить DataTemplate для ListBoxItem. Пользователь контролирует сетку с 4 TextBlock с. Этот элемент управления также содержит другие формы и изображения, больше предназначенные для наглядности, чем что-либо еще, поэтому для ясности я опущу их в коде этого вопроса.

Когда я удаляю пользовательский элемент управления в моем mainwindow.xaml, я вижу элемент управления и правильно связанные поля, указывающие на первую запись в источнике данных. Я хочу, чтобы этот элемент управления неоднократно отображался в списке или на панели переноса для каждой записи в базе данных.

Может ли кто-нибудь предоставить мне указатель или пример того, как пользовательский элемент управления должен отображаться как DataTemplate на панели ListBox control / other.

До этого момента я пробовал следующее безрезультатно: Заранее благодарим за любые советы.

<!--within Window.Resource -->
<DataTemplate x:Key="myActivity">
        <local:ucActivityItm /> <!--usercontrol -->
</DataTemplate>

<!-- Listbox within the window -->
<ListBox HorizontalAlignment="Stretch" ItemTemplate="{DynamicResource myActivity}"  VerticalAlignment="Stretch">
 <ListBoxItem>
<!-- control also added for testing to ensure it rendered out-->
<local:ucActivityItm />   
</ListBoxItem>        
</ListBox>

1 Ответ

14 голосов
/ 11 мая 2010

То, что DataTemplate на самом деле не присваивается вашему ListBox. Есть три способа:

1: заменить шаблон в разделе Ресурсы на

<ListBox.ItemTemplate>
    <DataTemplate>
        <local:ucActivityItm />
    </DataTemplate>
</ListBox.ItemTemplate>

в ListBox.
2: В некоторой степени связано:

<ListBox ... ItemTemplate="{StaticResource myActivity}">

3: Установите параметр DataType для DataTemplate выше, равный содержанию вашего ListBox.

<DataTemplate x:Key="myActivity" DataType="{x:Type ...}">

Я обычно просто делаю первый, но любой должен работать.

...