Вопрос по binding, header, tabcontrol, wpf, tabitem – TabControl.ItemTemplate: установите для TabItem.Header.Text значение MultiBinding с помощью StringFormat.

23

Как установить TabItem.Header для привязок, взятых из нескольких полей, каждая привязка показана в другом размере, все вместо исходного текста заголовка; без переопределения стиля по умолчанию и поведения заголовка - мне нужен только текст.

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

Я пробовал следующее:

<TabControl ItemsSource="{Binding}">
    <TabControl.ItemTemplate>
         <DataTemplate>
             <TabItem>
                 <TabItem.Header>
                     <MultiBinding StringFormat="{}{0}-{1}">
                         <Binding Path="Title"/>
                         <Binding Path="Category.Title"/>
                     </MultiBinding>
                 </TabItem.Header>
                 <TabItem.Content>
                     <TextBlock>
                         Here is what is gonna be in the TabItem - not header
                     </TextBlock>
                 </TabItem.Content>
             </TabItem>
         </DataTemplate>
    </TabControl.ItemTemplate>
</TabControl>

Но это ничего не показывает.

Я также пытался установить HeaderTemplate на DataTemplate, но в результате DataTemplate переопределяет стиль TabItem, и когда я щелкаю текст, он не переходит на нажатую вкладку, кроме того, невыбранные вкладки выглядят очень забавно, я вижу прямоугольник текста плавает, пока я хочу, чтобы он был прозрачным.

Итак, подведем итог моего вопросаЯ хочу установить TabItem.Header.Text для MultiBinding с StringFormat.

Я дал почти такой же ответ на этот вопрос несколько часов назад. Но, кажется, вопрос был удален и повторно размещен? Dabblernl
Почему вы удалили предыдущую версию этого вопроса? Почему бы просто не изменить то, что вы спрашиваете, и оставить комментарии на этот счет, тогда вы дадите ответам знать, что они не попали в цель, стихотворный разбор там работает? Simeon Pilgrim

Ваш Ответ

1   ответ
62

а также ItemTemplate, которое он наследует от ItemsControl. Он использует ContentTemplate для различения того, что отображается в области содержимого, а ItemTemplate, который определяет шаблон для заголовка. Кроме того, каждый элемент из вашего ItemSource будет автоматически помещен в элемент TabItem; его не нужно заново создавать в ItemTemplate, так как он попытается поместить TabItem внутри заголовка, как вы заметили.

Вместо повторного создания TabItem внутри ItemTemplate, используйте ItemTemplate для определения содержимого вашего заголовка и ContentTemplate для определения вашего содержимого.

<TabControl ItemsSource="{Binding}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding StringFormat="{}{0}--{1}">
                        <Binding Path="Title" />
                        <Binding Path="Category.Title" />
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding MyContent}" />
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

В первом абзаце вы упомянули о желании установить разные размеры на связанных частях заголовка. Если вы действительно захотите это сделать, вы не сможете использовать одну привязку или многократную привязку для установки текста, как это было сделано выше. Вместо этого вы можете вложить TextBlocks для достижения этого с различным форматированием для каждого.

<TabControl.ItemTemplate>
    <DataTemplate>
        <TextBlock>
            <TextBlock Text="{Binding Title}"
                       FontSize="12" />
            <Run Text="--" />
            <TextBlock Text="{Binding Category.Title}"
                       FontSize="10" />
        </TextBlock>
    </DataTemplate>
</TabControl.ItemTemplate>
Каковы стили TargetTypes для них? Я знаю, что TabItem для кнопки, но как насчет страницы? Patrick
Это было действительно очень сложно решить. +1 Afzaal Ahmad Zeeshan

Похожие вопросы