2013-03-27 3 views
1

Я ищу способ предотвратить изменение выбора элементов WPF (сейчас это управление Tab, но в будущем это нужно будет сделать для ListBoxes, ListViews и ComboBoxes).Событие смены выбора в WPF

Я наткнулся на this thread и попытался использовать ту же технику, которая была отмечена как ответ.

В этой технике вы извлекаете CollectionView для элементов управления вкладкой и обрабатываете CollectionView's CurrentChanging event, чтобы предотвратить выбор.

По какой-то причине событие CurrentChanging никогда не запускается в моем коде.

Вот мой очень простой пользовательский элемент управления, с которым я работаю. У него есть вкладка с тремя вкладками.

(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> 

В моей VB.NET код для пользовательского элемента управления, я просто извлекая CollectionView для элементов на вкладке управления и с помощью метода AddHandler, чтобы наблюдать за событием.

(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 

я ставлю точку останова на методе MainTabControl_ItemSelecting, но он никогда не попал.

Что я делаю неправильно?

Спасибо,

-Frinny

ответ

1

Вы пытались добавить IsSynchronizedWithCurrentItem="True" к вашему TabControl?

+0

Спасибо так много! – Frinavale

0

Как с вопросом, так и с ответом, я смог сделать это в C#. Так что для тех, кто нуждается что-то подобное с с # кода, вот как я это сделал:

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."); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^