【问题标题】:Click Event Sender in wpf单击 wpf 中的事件发件人
【发布时间】:2016-03-20 08:33:45
【问题描述】:

我正在设计一个 wpf 应用程序。我编写了一个网格(有 35 个文本块)范围的上下文菜单。当我单击鼠标右键时,我需要了解单击了哪个文本块。但是单击事件将 centtext 菜单作为发送者。如何到达用户单击鼠标右键的文本块?

我的 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());
        }

【问题讨论】:

  • 您是否检查了 MouseButtonEventArgs 的 OriginalSource 属性?
  • 你能发布你的代码吗?
  • 我的事件是鼠标右键单击,所以我无法到达 mousebuttoneventargs。
  • 您发布的代码显示您处理的是Click,而不是MouseRightButtonDown。在您的代码中的任何地方也没有看到TextBlock。请提供一个好的minimal reproducible example 可靠地重现该问题。请注意,将ContextMenu 附加到Grid,是Grid 处理打开上下文菜单的鼠标事件。您可能需要考虑设置网格项目的样式,以便它们中的每一个实际上都拥有一个上下文菜单。

标签: c# wpf events gridview contextmenu


【解决方案1】:

我找到了答案。 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;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2015-07-22
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多