2011-01-31 3 views
3

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

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

+2

Не только неуклюжий, но и мышь не единственный способ изменить вкладки. – Tergiver

ответ

2

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

+0

Разве это не просто переключение после того, как переключатель уже был выполнен? Элементы управления на левой вкладке уже могут исчезнуть. – ygoe

+0

Возможно, это была проблема :) – HCL

+1

После прочтения других сайтов и изучения исходного кода Microsoft, я думаю, что невозможно исключить выбор элементов вкладки. Ни за что. Его нельзя остановить. Если вам (I) это нужно, используйте другой элемент управления или переместите свой собственный TabControl. Я, вероятно, буду использовать другую концепцию пользовательского интерфейса. – ygoe

0

Я нашел способ сделать это, используя стиль для 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> 
Смежные вопросы