Наследование свойства IsEnabled в TabControl

166
24 декабря 2018, 00:50

Подскажите как решить следующую проблему. Есть TabControl с несколькими TabItem. Каждый TabItem в начальный момент недоступен (IsEnabled = false), рядом с TabControl присутствуют CheckBox-ы, после нажатия на которые активируется соответствующие TabItem. Как активировать и деактивировать это понятно - присваиваю каждому TabItem уникальное имя и у CheckBox прописываю реакцию на check/uncheck. Начал заполнять TabItem-ы элементами типа TextBox и др. - после компиляции выяснилось, что несмотря на то что они помещались в Grid принадлежащий неактивному TabItem, но сами по неизвестной причине активны и не унаследовали IsEnabled=false. Как можно просто решить эту проблему? В принципе понятное дело, каждому элементу можно прописать имя и в check/uncheck включать/выключать, но может есть способ заставить унаследовать IsEnabled TabItem-а?

Answer 1

В дизайнере студии щелкните правой кнопкой мыши по TabControl и выберите Edit Template>Edit a Copy... и добавьте шаблон элемента к себе в проект.

В шаблоне вы увидите такую структуру:

<Grid x:Name="templateRoot" ...>
    <TabPanel x:Name="headerPanel" ... />
    <Border x:Name="contentPanel" ...>
        <ContentPresenter x:Name="PART_SelectedContentHost" ... />
    </Border>
</Grid>

Как видно, заголовки TabItem'ов и их контент лежат рядом и не вложены друг в друга, это объясняет почему свойства TabItem не наследуются его контентом. Это можно исправить прямо в шаблоне, добавьте такую привязку:

    <Border x:Name="contentPanel" ...
            IsEnabled="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=TabControl}, Path=SelectedItem.IsEnabled}">
READ ALSO
Не функционирует перемещение Unity 2D

Не функционирует перемещение Unity 2D

Написал скрипт на шарпе, прикрепил его к обьекту игрока, по задумке изображение должно перемещаться по нажатию на стрелку вправо, но ничего...

131
Создать свой Task.Run

Создать свой Task.Run

Каким образом в c# можно сделать async получив значение во внешний метод из лямбды?

144