mcNosferatum Ответов: 1

Как я могу поймать событие tabitem_previewmousedown


- Привет! Я пытаюсь поймать Табитема.PreviewMouseDown в моем решении WPF, но когда я нажимаю на элемент tab, я даю TabControl в качестве источника. могу ли я дать TabItem на событии TabItem_PreviewMouseDown?

Что я уже пробовал:

Это решение работает хорошо:

<tabcontrol name="MyTabControl" tabitem.previewmousedown="TabItem_PreviewMouseDown">
   <tabitem header="Tabitem 0">
   <tabitem header="Tabitem 1">
   <tabitem header="Tabitem 2">
   <tabitem header="Tabitem 3">
   <tabitem header="Tabitem 4">
   <tabitem header="Tabitem 5">


В главных.язык XAML.файл CS :

private void TabItem_PreviewMouseDown(object sender, MouseEventArgs e)
{
    var tabItem = e.Source as TabItem; // e.Source is TabItem
}


Мне нужно установить TabItems с привязкой:

<tabcontrol name="MyTabControl" itemssource="{Binding Path=Tabs}" tabitem.previewmousedown="TabItem_PreviewMouseDown">


в .в CS:

public ObservableCollection<tabitem> Tabs { get; set; }
 
public MainWindow()
{
   InitializeComponent();
   Tabs = new ObservableCollection<tabitem>();
   for (int i = 0; i < 5; i++)
   {
     TabItem mti = new TabItem() { Header = i.ToString() };
     Tabs.Add(mti);
   }
   DataContext = this;
}
 
private void TabItem_PreviewMouseDown(object sender, MouseEventArgs e)
{
    var tabItem = e.Source as TabItem; // e.Source is TabControl!!!
}


Как я могу дать TabItem на событии TabItem_PreviewMouseDown?

#realJSOP

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

mcNosferatum

Правильно ли вы используете заглавную букву в XAML? Элемент tabitem.PreviewMouseDown= " TabItem_PreviewMouseDown"

#realJSOP

Конечно, я так и сделал. В любом случае, это не сработает так, как ты пытаешься. Смотрите мое решение.

mcNosferatum

Да, это не работает! Но ваше решение работает хорошо! Спасибо!

#realJSOP

Кстати, если вы собираетесь публиковать фрагменты кода, убедитесь, что код синтаксически корректен. Никто не сможет скопировать/вставить опубликованный вами код без необходимости редактировать его, как только он окажется в IDE. Это боль, и большинство людей не хотят иметь с ней дело. Ваш XAML неверен, так как ни одно из имен элементов не имеет правильного корпуса.

1 Ответов

Рейтинг:
9

#realJSOP

Ну, вам нужно вручную добавить обработчик предварительного просмотра, когда вы добавляете TabItems в коллекцию:

mti.PreviewMouseDown += MainWindow_PreviewMouseDown;


Не забудьте вручную отцепить эти события, когда TabControl выходит из области видимости.

Еще раз, я не мог заставить компилятор принять

TabItem.PreviewMouseDown="eventHandler"


в xaml для TabControl