Я делаю что-то вроде следующего, чтобы предотвратить изменение выбора вкладки:
tabControl.Items.CurrentChanging += new CurrentChangingEventHandler(Items_CurrentChanging);
void Items_CurrentChanging(object sender, CurrentChangingEventArgs e)
{
if( dataIsInvalid )
{
// Show some popup message
var item = ((ICollectionView)sender).CurrentItem;
e.Cancel = true;
tabControl.SelectedItem = item; // !! This causes the CurrentChanging event to happen twice !!
// But without this the visual tree does not update! :(
}
}
Однако проблема, с которой я сейчас сталкиваюсь, заключается в том, что последняя строка выше вызывает событие CurrentChanging во второй раз, и мое всплывающее сообщение отображается дважды. Мало того, он отображается во второй раз после того, как сначала фокусируется другое окно, а затем снова фокусируется на окне элемента управления вкладками.
Есть идеи, почему это может происходить?
- EDIT--
Похоже, мне действительно нужно только e.Cancel
и не требовать обновления SelectedItem
снова. Однако визуальное дерево не обновляется, пока я не сделаю это. Можно ли каким-либо образом убедиться, что визуальное дерево элемента управления вкладками обновляется после e.Cancel
, без необходимости обновления SelectedItem
?