Это не обычный способ подойти к таким вещам.
Вы должны определять стили и шаблоны в xaml, а не в коде.
Но.
Гораздо более привычно использовать шаблоны данных, которые соответствуют типу модели представления, используя Datatype = вместо повторного шаблона listboxitem.
Типом является модель представления строки.
Таким образом, у вас есть (скажем) класс TextBoxVM, класс DividerVM и т. Д.
Вы связываете наблюдаемую коллекцию объекта со своим источником предметов.
Шаблон TextBoxVM в текстовое поле, разделитель в разделитель и т. Д.
Первые примеры, которые у меня есть:
<DataTemplate DataType="{x:Type local:DividerVM}">
<local:Divider />
</DataTemplate>
<DataTemplate DataType="{x:Type local:DrawCategoryVM}">
<Grid>
<TextBlock FontSize="{DynamicResource BigFont}" Text="{Binding Heading}" />
</Grid>
</DataTemplate>
<DataTemplate DataType="{x:Type local:DrawOptionVM}">
<Grid Height="38"
Background="Transparent"
>
Вы можете использовать basedon для "наследования" атрибутов одного стиля в другом.