Как встроить ItemTemplate для wpf ListBox в ресурсы окна?

Извините, если это основной вопрос, но как я могу взять ItemTemplate, который у меня есть для ListBox, и поместить его в ресурсы для окна, чтобы его могли использовать более одного ListBox.

Вот немного XAML:

<Window x:Class="Example">
    <Window.Resources>
        <DataTemplate x:Key="dtExample">
            <ListBox.ItemTemplate>
            // styles go here...
            </ListBox.ItemTemplate>
        </DataTemplate>
    </Window.Resources>
    <ListBox ItemTemplate="{StaticResource dtExample}">
    // items go here...
    </ListBox>
</Window>

Это вызывает ошибку времени разработки «Прикрепленное свойство не имеет установщика». Для краткости я удалил части кода, которые, как мне казалось, не будут иметь значения.

Спасибо


person Community    schedule 13.03.2009    source источник


Ответы (6)


просто добавьте свой itemtemplate в ресурс вашего окна и добавьте ключ:

<Window.Resource>
 <DataTemplate x:Key="myTemplate">
  ....
 </DataTemplate>
</Window.Resources>

а затем примените его примерно так:

<ListBox ItemTemplate="{StaticResource myTemplate}">
 ...
</ListBox>
person Joachim Kerschbaumer    schedule 13.03.2009
comment
Я попытался поместить свой xaml ListBox.ItemTemplate внутри DataTemplate, но получил красную волнистую ошибку, у прикрепленного свойства нет установщика. Идеи? - person ; 13.03.2009
comment
хорошо, свойство ItemTemplate ItemsControl ЯВЛЯЕТСЯ шаблоном данных. если вы предоставите некоторый код/разметку, вам будет намного проще помочь. просто заявив, что вы получаете ошибку, не поможет;) - person Joachim Kerschbaumer; 13.03.2009

вы указали следующий код:

 <DataTemplate x:Key="dtExample">
        <ListBox.ItemTemplate>
        // styles go here...
        </ListBox.ItemTemplate>
    </DataTemplate>

но это не сработает. вы не можете указать <ListBox.ItemTemplate> непосредственно в своем шаблоне. вам это не нужно здесь. просто создайте простой шаблон данных, и он должен работать.

person Joachim Kerschbaumer    schedule 13.03.2009

Я знаю, что пост слишком старый, чтобы быть интересным для автора, но я могу быть интересен тем, у кого такая же проблема, и я погуглил. Как я вижу, проблема в том, что вы должны использовать ListBox.ItemTemplate внутри ListBox. Например, <ListBox ...><ListBox.ItemTemplate> ... </ListBox.ItemTemplate></ListBox>

person Kirill Lykov    schedule 30.06.2010
comment
Это действительно была моя проблема. Спасибо. - person Bent Tranberg; 11.07.2014

Я думаю, проблема в том, что вы должны использовать свойства x:Key в своих ресурсах вместо x:Name..

Измените это, и это будет работать как шарм :)

person Arcturus    schedule 13.03.2009
comment
Я изменил его на ключ, и это предотвратило выделение ItemTemplate серым цветом в xaml, но я все еще получаю сообщение об ошибке: присоединяемое свойство «ItemTemplate» не найдено в типе «ListBox». ... и у меня есть ItemTemplate={StaticResource myTemplate}, как описано выше. - person ; 13.03.2009

У вас есть следующие теги в вашем классе Window?

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
person Arcturus    schedule 13.03.2009
comment
Хм, если это все еще не работает ... не могли бы вы опубликовать весь файл xaml? - person Arcturus; 13.03.2009
comment
(То есть, да, у меня есть эти теги в моем классе Window). :) - person ; 13.03.2009
comment
Да, я хотел бы опустить части, которые не вызывают проблемы, и которыми я не должен делиться... Я прокомментирую некоторые вещи и попытаюсь снова продублировать проблему... и отредактирую некоторые немного "продезинфицированный" xaml. Явно происходит что-то странное. - person ; 13.03.2009

тема старая, но вот решение:

<Window.Resources>
    <Style x:Key="ListBoxItem_Color" TargetType="{x:Type ListBoxItem}">
        <Setter Property="Template">
            *//style*
        </Setter>
    </Style>
</Window.resources>

<ListBox x:Name="MyListBox"
         ...
         ItemContainerStyle="{StaticResource ListBoxItem_Color}">
      <.../>
</ListBox>
person Riper    schedule 19.06.2020