Wpf TabItem事件处理中的DataGrid
我有一个带有两个TabItems的TabControl,在一个TabItem中我有一个DataGrid。 我试图处理TabItem click,它可以工作,但是,当我在“dataGrid1”的一行中单击时,TabItem click的事件“TabItem_MouseLeftButtonUp”也被触发。参见代码: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"
<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 MouseLeftButtonUpforTabItem
在选项卡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,你能编辑它吗?