что вы можете сделать, это создать шаблонный элемент управления (вы можете легко создать его через визуальные студии Add - New Item menu), который вы получаете из ListBox:
public class MyListBox : ListBox
{
public MyListBox()
{
this.DefaultStyleKey = typeof(MyListBox);
}
}
Когда вы создаете шаблонный элемент управления, он также создает папку Themes и там файл generic.xaml, в котором определены ваши стили.
После этого возьмите ListBox - Style из здесь , скопируйте и вставьте его в свой файл generic.xaml в нужное место (вам также необходим ValidationTooltipTemplate):
<Style TargetType="local:MyListBox">
<Setter Property="Padding" Value="1"/>
<Setter Property="Background" Value="#FFFFFFFF" />
<Setter Property="Foreground" Value="#FF000000"/>
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="VerticalContentAlignment" Value="Top" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="TabNavigation" Value="Once" />
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="BorderBrush"> ...
Хорошо, после этого определите ваш ItemTemplate в том же xaml:
<DataTemplate x:Key="MyItemTemplate">
и добавьте его в список сеттеров вашего стиля ListBox:
<Style TargetType="local:MyListBox">
<Setter Property="ItemTemplate" Value="{StaticResource MyItemTemplate}"/>^
Теперь это ваш шаблон по умолчанию.
Но нужно ли вам добавлять какое-либо конкретное поведение в свой ListBox, потому что вы хотите наследовать от него. Если вы просто хотите добавить конкретный шаблон элемента, я бы не рекомендовал наследовать от ListBox (на самом деле DataTemplate не является универсальным, он всегда специфичен для DataType). Если вы не добавите конкретное поведение, я бы пошел для создания глобального DataTemplate (может быть, определен в вашем app.xaml) и ссылался бы на него как DataTemplate каждый раз, когда вам это нужно, или я бы создал определенный стиль с этим DataTemplate и установил бы стиль общий ListBox.
Если у вас есть какие-либо вопросы, просто оставьте комментарий.
Надеюсь, это поможет!
BR
TJ