2010-11-16 22 views
5

दुर्भाग्य से कोई TabControl.SelectionChanging ईवेंट (चयनकर्ता चयन चयन), मैं इस व्यवहार को लागू करने के लिए संघर्ष कर रहा हूं इसलिए मैं बदलते अनुरोध को रद्द कर सकता हूं।क्या TabControl.Items.CurrentChanging को रद्द करने का कोई तरीका है?

मैं TabControl.Items.CurrentChanging (Items संपत्ति है और ItemCollection) सच करने के लिए e.Cancel (CurrentChangingEventArgs की) की स्थापना घटना को संभालने की कोशिश की, लेकिन हालांकि आइटम संग्रह में नहीं बदला गया है यूआई नए टैब के साथ अद्यतन किया जाता है है ।

क्या कोई शर्त असंतुष्ट होने पर उपयोगकर्ता को TabItem पर स्विच करने से रोकने का कोई तरीका है?

उत्तर

5

मुझे यह नहीं पता कि यह क्यों होता है, और यह मुझे बहुत परेशान करता है।

लेकिन यहाँ इसके लिए मेरी workaround है:

नीचे दिए नमूने में, चेकबॉक्स मौजूदा टैब "ताला" है। तो चेक किया गया है कि उपयोगकर्ता टैब नहीं बदल सकता है।

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

     e.Cancel = true; 

     tabControl1.SelectedItem = item; 
    } 
} 

असल में, क्या होता है (यदि मैं इसे सही ढंग से समझता हूं) दृश्य पेड़ अपडेट हो जाता है, लेकिन तार्किक पेड़ नहीं होता है। उपर्युक्त तरीका दृश्य को तार्किक पेड़ से सिंक करने के लिए मजबूर करता है।

+0

अच्छी पकड़। धन्यवाद। – Shimmy

0

आप प्रत्येक TabItem पर PreviewLostKeyboardFocus घटना संभाल कर सकते हैं, और एक अन्य टैब पर स्विच करने से रोकने के लिए true को घटना तर्कों की Handled गुण सेट:

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

http://www.netframeworkdev.com/windows-presentation-foundation-wpf/how-to-cancel-navigation-between-tabitems-in-a-tabcontrol-84994.shtml देखें।

संबंधित मुद्दे