WPF - TabControl - Запретить изменение выбора - PullRequest
4 голосов
/ 31 января 2011

Кажется, что WPF TabControl не поддерживает возможность отмены изменения выбора, поскольку нет события SelectionChanging(), только событие SelectionChanged.Кто-нибудь придумал, как это сделать?

Единственный найденный мной способ - это присоединиться к событию PreviewMouseLeftButtonDown() на каждом TabItem и установить e.Handled на true, если я не хочу, чтобы эта конкретная страница была выбрана.Кажется, это работает, но неуклюже.

1 Ответ

0 голосов
/ 22 сентября 2016

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

Это хорошо, потому что он избегает уловок с событиями щелчка, которые могут не срабатывать, если пользователь использует клавиатуру, например.

<TabControl.Resources>
    <Style TargetType="{x:Type TabItem}">
        <Setter Property="Focusable"  Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.IsUpToDate}" />
        <Setter Property="HeaderTemplate">
             <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding Group}" />
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</TabControl.Resources>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...