Как использовать пользовательский TabItem в шаблоне TabControl? - PullRequest
1 голос
/ 08 мая 2019

У меня есть CustomTabItem в библиотеке пользовательских элементов управления. Когда я явно использую его в xaml или в коде, это работает. Когда я вместо привязки использую привязку к ViewModel (CaliburnMicro), используется стандарт TabItem. Как указать использование CustomTabItem в xaml?
Я пытался указать DataType = "{x:Type adc:ActorTabItem}" - не сработало.

Я пытался указать DataType="{x:Type adc:CustomTabItem}" - не сработало.

        <adc:TabControl ItemsSource="{Binding Pages}" Grid.Row="1">
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"></TextBlock>
                </DataTemplate>
            </TabControl.ItemTemplate>

            <adc:TabControl.ContentTemplate>
                <DataTemplate>
                    <ContentControl cal:View.Model="{Binding}" />
                </DataTemplate>
            </adc:TabControl.ContentTemplate>
        </adc:TabControl>

1 Ответ

0 голосов
/ 14 мая 2019

Здесь происходит две вещи:

  1. Вам потребуется создать подкласс TabControl и переопределить его свойство ItemContainerGenerator, чтобы сгенерировать тип MyTabItem вместо его собственного. К сожалению, вы не можете сделать это без подклассов. Нет ничего похожего на ItemsPanelTempalate для самих предметов.

  2. Если вы связываете TabControl.ItemsSource с коллекцией, способ переупорядочить дочерние элементы в элементе управления с вкладками состоит в изменении порядка связанной коллекции, а затем TabControl обрабатывает обновление пользовательского интерфейса. Фактическая коллекция должна быть ObservableCollection, чтобы это работало, но в любом случае так и должно быть. Объявленный тип TabControl.ItemsSource равен System.Collections.IEnumerable, но вы можете привести его к System.Collections.IList в вашем обработчике перетаскивания и использовать его для изменения порядка коллекции. Это будет работать, и соответствующие уведомления будут подняты.

...