2013-03-27 2 views
1

Je cherche un moyen d'empêcher une modification de sélection dans les éléments WPF (le contrôle Tab en ce moment, mais dans le futur cela devra être fait pour ListBoxes, ListViews et ComboBoxes).Événement de modification de sélection dans WPF

Je suis tombé sur this thread et j'ai essayé d'utiliser la même technique qui a été marquée comme réponse.

Dans cette technique, vous récupérez le CollectionView pour les éléments du contrôle onglet et gérez le CollectionView's CurrentChanging event pour empêcher la sélection de se produire.

Pour une raison quelconque, l'événement CurrentChanging n'est jamais déclenché dans mon code.

Voici mon contrôle utilisateur très simple avec lequel je travaille. Il a un contrôle de tabulation avec 3 onglets.

(XAML)

<UserControl x:Class="UserControlWithTabs" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 

    <TabControl x:Name="MainTabControl"> 
     <TabItem Header="First Tab">Content for the first tab</TabItem> 
     <TabItem Header="Second Tab">Content for the second tab</TabItem> 
     <TabItem Header="Third Tab">Content for the third tab</TabItem> 
    </TabControl> 
</UserControl> 

Dans mon code VB.NET pour le contrôle de l'utilisateur, je récupère simplement le CollectionView pour les éléments du contrôle onglet et en utilisant la méthode AddHandler pour surveiller l'événement.

(VB.NET)

Public Class UserControlWithTabs 
    Private WithEvents mainTabCollectionView As CollectionView 
    Private Sub UserControlWithTabs_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded 
    mainTabCollectionView = CollectionViewSource.GetDefaultView(MainTabControl.Items) 
    AddHandler mainTabCollectionView.CurrentChanging, AddressOf MainTabControl_ItemSelecting 
    End Sub 

    Private Sub MainTabControl_ItemSelecting(ByVal sender As Object, ByVal e As System.ComponentModel.CurrentChangingEventArgs) 

    End Sub 
End Class 

Je mets un point d'arrêt sur la méthode MainTabControl_ItemSelecting, mais jamais touché.

Qu'est-ce que je fais mal?

Merci,

-Frinny

Répondre

1

Avez-vous essayé d'ajouter à votre IsSynchronizedWithCurrentItem="True"TabControl?

+0

Merci beaucoup! – Frinavale

0

Merci à la fois la question et la réponse, j'ai été en mesure de le faire en C#. Donc, pour ceux qui ont besoin quelque chose comme ça avec C# code-behind, voici comment je l'ai fait:

mytab.IsSynchronizedWithCurrentItem = true; 
    mytab.Items.CurrentChanging += new CurrentChangingEventHandler(Items_CurrentChanging); 

    private void Items_CurrentChanging(object sender, CurrentChangingEventArgs e) 
    { 
     if (e.IsCancelable) 
     { 
      FrameworkElement elemfrom = ((ICollectionView)sender).CurrentItem as FrameworkElement; 
      FrameworkElement elemto = mytab.SelectedItem as FrameworkElement; 
     } 
     Console.WriteLine("tab is changing."); 
    } 
Questions connexes