Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to cancel TabControl.Items.CurrentChanging?

There is unfortunately no TabControl.SelectionChanging event (Selector.SelectionChanging), I am struggling to implement this behavior so I can cancel the changing request.

I tried to handle the TabControl.Items.CurrentChanging (the Items property is and ItemCollection) event setting e.Cancel (of the CurrentChangingEventArgs) to true, but the UI is is updated with the new tab although the item is not changed in the collection.

Is there any way to prevent user from switching to a different TabItem when a condition is dissatisfied?

like image 640
Shimmy Weitzhandler Avatar asked Nov 16 '10 12:11

Shimmy Weitzhandler


1 Answers

I don't know the exact reason why this happens, and it annoys me greatly.

But here's my workaround for it:

In the sample below, checkbox is "locking" the current tab. So checked means user can't change tab.

void Items_CurrentChanging(object sender, CurrentChangingEventArgs e)
{
    if (checkBox1.IsChecked.Value)
    {
        var item = ((ICollectionView)sender).CurrentItem;

        e.Cancel = true;

        tabControl1.SelectedItem = item;
    }
}

Basically, what happens is (if I understand this correctly) the visual tree gets updated, but the logical tree does not. The above way forces the visual to sync with the logical tree.

like image 53
ThomasAndersson Avatar answered Sep 29 '22 19:09

ThomasAndersson