Wpf TabItem事件处理中的DataGrid

Wpf TabItem事件处理中的DataGrid,wpf,datagrid,tabitem,routed-events,mahapps.metro,Wpf,Datagrid,Tabitem,Routed Events,Mahapps.metro,我有一个带有两个TabItems的TabControl,在一个TabItem中我有一个DataGrid。 我试图处理TabItem click,它可以工作,但是,当我在“dataGrid1”的一行中单击时,TabItem click的事件“TabItem_MouseLeftButtonUp”也被触发。参见代码: <TabControl Height="211" HorizontalAlignment="Left" Margin="33,29,0,0" Name="tabControl1"

我有一个带有两个TabItems的TabControl,在一个TabItem中我有一个DataGrid。 我试图处理TabItem click,它可以工作,但是,当我在“dataGrid1”的一行中单击时,TabItem click的事件“TabItem_MouseLeftButtonUp”也被触发。参见代码:

<TabControl Height="211" HorizontalAlignment="Left" Margin="33,29,0,0" Name="tabControl1" VerticalAlignment="Top" Width="417" >
        <TabItem Header="tabItem1" Name="tabItem1">
            <Grid />
        </TabItem>
        <TabItem MouseLeftButtonUp="TabItem_MouseLeftButtonUp">
            <DataGrid AutoGenerateColumns="True" Height="134" Name="dataGrid1" Width="307" />
        </TabItem>
</TabControl>


注意:如果我使用TabItem,我不能使用personalize
,因为我使用的是MahApps。标题样式os TabItem将中断。

您将通过MouseLeftButtonUp事件接收EventArgs。只需过滤掉您需要的任何内容。

MouseLeftButtonUp事件是冒泡路由事件。当您在
DataGrid
s行上时,事件会在其祖先中冒泡并调用相应的处理程序,TabItem\u MouseLeftButtonUpfor
TabItem

选项卡item\u MouseLeftButtonUp事件中,您可以检查是谁引发了事件,哪个控件是事件的起源。如果不是
选项卡项
则不执行任何操作

private void TabItem_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
     if(sender is TabItem)
     {
           //do the work
     }
}

当单击TabItem时,OriginalSource是一个边框,当我右键单击TabItem的文本时,OriginalSource是一个文本块,因此,此解决方案不起作用。我在您的解决方案中做了一些修改sender.GetType()将返回控件的类型(DataGrid或TabItem),因此,您的解决方案起作用,我将其标记为answer,你能编辑它吗?