单击 wpf 中的事件发件人
Click Event Sender in wpf
我正在设计一个 wpf 应用程序。我编写了一个网格(有 35 个文本块)范围的上下文菜单。当我单击鼠标右键时,我需要了解我单击了哪个文本块。但是点击事件将 centext 菜单作为发件人。如何到达用户单击鼠标右键的哪个文本块?
我的XAML代码------------------------------------ --------------------------:
<Grid>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="Hafta İçi" x:Name="btnWeekDay" Click="btnWeekDay_Click" />
<MenuItem Header="Cuma" x:Name="btnFriday" Click="btnFriday_Click"/>
<MenuItem Header="Cumartesi" x:Name="btnSaturday" Click="btnSaturday_Click"/>
<MenuItem Header="Pazar" x:Name="btnSunday" Click="btnSunday_Click"/>
<MenuItem Header="İdari İzin" x:Name="btnAdminLeave" Click="btnAdminLeave_Click"/>
<MenuItem Header="Bayram/Tatil" x:Name="btnHoliday" Click="btnHoliday_Click" a/>
</ContextMenu>
</Grid.ContextMenu>
我的 C# 代码------------:
private void btnWeekDay_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(sender + e.Source.ToString());
}
我找到了答案。
1. 我将上下文菜单从网格移动到文本块。
2. 我触发了 contextmenuopening 事件并捕获了我单击鼠标右键的 texblock。
这是 xaml 代码。
<Page.Resources>
<Style x:Key="txtBlockStyle" TargetType="{x:Type TextBlock}">
<Setter Property="TextBlock.Background" Value="AliceBlue"/>
</Style>
<Style x:Key="borderStyle" TargetType="{x:Type Border}">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="DarkGreen"/>
</Style>
<ContextMenu x:Key="txtBlockContextMenu">
<MenuItem Header="Hafta İçi" x:Name="btnWeekDay" Click="btnWeekDay_Click" />
<MenuItem Header="Cuma" x:Name="btnFriday" Click="btnFriday_Click"/>
<MenuItem Header="Cumartesi" x:Name="btnSaturday" Click="btnSaturday_Click"/>
<MenuItem Header="Pazar" x:Name="btnSunday" Click="btnSunday_Click"/>
<MenuItem Header="İdari İzin" x:Name="btnAdminLeave" Click="btnAdminLeave_Click"/>
<MenuItem Header="Bayram/Tatil" x:Name="btnHoliday" Click="btnHoliday_Click" />
</ContextMenu>
</Page.Resources>
.....
<Border Style="{StaticResource borderStyle}" Grid.Column="0" Grid.Row="1" >
<TextBlock x:Name="txtDate1" ContextMenuOpening="CustomContextMenuOpening" ContextMenu="{StaticResource ResourceKey=txtBlockContextMenu}"></TextBlock>
</Border>
这是隐藏代码。
TextBlock targetTextBlock;
private void CustomContextMenuOpening(object sender, ContextMenuEventArgs e)
{
targetTextBlock = (TextBlock)sender;
}
我正在设计一个 wpf 应用程序。我编写了一个网格(有 35 个文本块)范围的上下文菜单。当我单击鼠标右键时,我需要了解我单击了哪个文本块。但是点击事件将 centext 菜单作为发件人。如何到达用户单击鼠标右键的哪个文本块?
我的XAML代码------------------------------------ --------------------------:
<Grid>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="Hafta İçi" x:Name="btnWeekDay" Click="btnWeekDay_Click" />
<MenuItem Header="Cuma" x:Name="btnFriday" Click="btnFriday_Click"/>
<MenuItem Header="Cumartesi" x:Name="btnSaturday" Click="btnSaturday_Click"/>
<MenuItem Header="Pazar" x:Name="btnSunday" Click="btnSunday_Click"/>
<MenuItem Header="İdari İzin" x:Name="btnAdminLeave" Click="btnAdminLeave_Click"/>
<MenuItem Header="Bayram/Tatil" x:Name="btnHoliday" Click="btnHoliday_Click" a/>
</ContextMenu>
</Grid.ContextMenu>
我的 C# 代码------------:
private void btnWeekDay_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(sender + e.Source.ToString());
}
我找到了答案。 1. 我将上下文菜单从网格移动到文本块。 2. 我触发了 contextmenuopening 事件并捕获了我单击鼠标右键的 texblock。
这是 xaml 代码。
<Page.Resources>
<Style x:Key="txtBlockStyle" TargetType="{x:Type TextBlock}">
<Setter Property="TextBlock.Background" Value="AliceBlue"/>
</Style>
<Style x:Key="borderStyle" TargetType="{x:Type Border}">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="DarkGreen"/>
</Style>
<ContextMenu x:Key="txtBlockContextMenu">
<MenuItem Header="Hafta İçi" x:Name="btnWeekDay" Click="btnWeekDay_Click" />
<MenuItem Header="Cuma" x:Name="btnFriday" Click="btnFriday_Click"/>
<MenuItem Header="Cumartesi" x:Name="btnSaturday" Click="btnSaturday_Click"/>
<MenuItem Header="Pazar" x:Name="btnSunday" Click="btnSunday_Click"/>
<MenuItem Header="İdari İzin" x:Name="btnAdminLeave" Click="btnAdminLeave_Click"/>
<MenuItem Header="Bayram/Tatil" x:Name="btnHoliday" Click="btnHoliday_Click" />
</ContextMenu>
</Page.Resources>
.....
<Border Style="{StaticResource borderStyle}" Grid.Column="0" Grid.Row="1" >
<TextBlock x:Name="txtDate1" ContextMenuOpening="CustomContextMenuOpening" ContextMenu="{StaticResource ResourceKey=txtBlockContextMenu}"></TextBlock>
</Border>
这是隐藏代码。
TextBlock targetTextBlock;
private void CustomContextMenuOpening(object sender, ContextMenuEventArgs e)
{
targetTextBlock = (TextBlock)sender;
}