2010-11-16 20 views
5

Rất tiếc, không có sự kiện TabControl.SelectionChanging (Selector.SelectionChanging), tôi đang cố gắng thực hiện hành vi này để tôi có thể hủy yêu cầu thay đổi.Có cách nào để hủy TabControl.Items.CurrentChanging không?

tôi đã cố gắng để xử lý các thiết e.Cancel (của CurrentChangingEventArgs) là true TabControl.Items.CurrentChanging (các Items bất động sản là gì và ItemCollection) sự kiện, nhưng giao diện người dùng được được cập nhật với các tab mới mặc dù mục là không thay đổi trong bộ sưu tập .

Có cách nào để ngăn người dùng chuyển sang TabItem khác khi điều kiện không hài lòng?

Trả lời

5

Tôi không biết lý do chính xác tại sao điều này xảy ra và nó làm tôi khó chịu.

Nhưng đây là giải pháp của tôi cho nó:

Trong ví dụ bên dưới, hộp kiểm là "khóa" tab hiện tại. Vì vậy, kiểm tra có nghĩa là người dùng không thể thay đổi tab.

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

     e.Cancel = true; 

     tabControl1.SelectedItem = item; 
    } 
} 

Về cơ bản, điều gì xảy ra là (nếu tôi hiểu chính xác) cây hình ảnh được cập nhật nhưng cây logic thì không. Cách trên buộc các hình ảnh để đồng bộ hóa với cây hợp lý.

+0

Bắt tốt. cảm ơn bạn. – Shimmy

0

Bạn cũng có thể xử lý các sự kiện PreviewLostKeyboardFocus trên mỗi TabItem, và thiết lập các Handled tài sản của các đối số sự kiện để true để ngăn chặn chuyển sang tab khác:

protected void tabItem_PreviewLostKeyboardFocus(object sender, 
    KeyboardFocusChangedEventArgs e) 
{ 
    if (!ValidateTabItem((TabItem) sender)) { 
     e.Handled = true; 
    } 
} 

Xem http://www.netframeworkdev.com/windows-presentation-foundation-wpf/how-to-cancel-navigation-between-tabitems-in-a-tabcontrol-84994.shtml.

Các vấn đề liên quan