由于 PreviewMouseLeftButtonDown,数据网格内的按钮未被触发

2023-12-14

我正在开发 WPF 应用程序。

根据要求,我想在数据网格中显示项目列表。每行还有一个“删除”按钮,使用这个按钮我们可以删除相应的项目。 我还想要网格的拖放功能。即用户可以向上/向下移动行。

我在用“PreviewMouseLeftButtonDown” and “Drop”数据网格的事件来实现拖放功能。

对于删除按钮,我绑定了删除命令。

Command="{Binding ElementName=viewName,Path=DataContext.DeleteCommand}" 

我也尝试过

 Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.DeleteCommand}" 

现在的问题是,当我单击“删除”按钮时,删除命令处理程序没有被触发。但是,如果我删除数据网格的“PreviewMouseLeftButtonDown”和“Drop”事件,则删除命令处理程序可以正常工作。

我还注意到,即使在添加 PreviewMouseLeftButtonDown 事件后注释了“PreviewMouseLeftButtonDown”内的所有代码,它也会阻止删除命令处理程序的执行。

                    <DataGridTemplateColumn Width="35"  >
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button Width="30" Content="X"     Command="{Binding ElementName=viewCSW,Path=DataContext.DeleteCommand}"    HorizontalAlignment="Center" Margin="0,0,0,0" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

                </DataGrid.Columns>
                <DataGrid.RowStyle>
                    <Style TargetType="DataGridRow">
                        <Setter Property="Height" Value="25"/>
                    </Style>
                </DataGrid.RowStyle>

PreviewMousedown代码

  private void dgEmployee_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {

            prevRowIndex = GetDataGridItemCurrentRowIndex(e.GetPosition);

            if (prevRowIndex < 0)
                return;
            dgEmployee.SelectedIndex = prevRowIndex;

            var selectedEmployee = dgEmployee.Items[prevRowIndex];//as Employee;

            if (selectedEmployee == null)
                return;
            //Now Create a Drag Rectangle with Mouse Drag-Effect
            //Here you can select the Effect as per your choice
            DragDropEffects dragdropeffects = DragDropEffects.Move;

            if (DragDrop.DoDragDrop(dgEmployee, selectedEmployee, dragdropeffects)
                                != DragDropEffects.None)
            {
                //Now This Item will be dropped at new location and so the new Selected Item
                dgEmployee.SelectedItem = selectedEmployee;
            }


            //      sourceElement.CaptureMouse();
            //  return;

        }

我正在为这个问题苦苦挣扎。

如果有人有解决方案,请告诉我。

谢谢, 拉尼什


移动DragDrop.DoDragDrop调用数据网格的MouseMove event:

private void dgEmployee_MouseMove(object sender, MouseEventArgs e)
    {
        if(e.LeftButton == MouseButtonState.Pressed)
        {
            Employee selectedEmp = dgEmployee.Items[prevRowIndex] as Employee;
            if (selectedEmp == null)
                return;

            DragDropEffects dragdropeffects = DragDropEffects.Move;
            if (DragDrop.DoDragDrop(dgEmployee, selectedEmp, dragdropeffects)
                            != DragDropEffects.None)
            {
                //Now This Item will be dropped at new location and so the new Selected Item
                dgEmployee.SelectedItem = selectedEmp;
            }
        }
    }

更新后的PreviewMouseLeftButtonDown处理程序:

void dgEmployee_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        prevRowIndex = GetDataGridItemCurrentRowIndex(e.GetPosition);

        if (prevRowIndex < 0)
            return;

        dgEmployee.SelectedIndex = prevRowIndex;
    }

它不仅可以解决您的问题,还可以提供更好的用户体验。当我移动鼠标而不是按下行时,应该启动拖动。

下次请链接教程您正在使用- 这将使其他人更容易重现您遇到的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由于 PreviewMouseLeftButtonDown,数据网格内的按钮未被触发 的相关文章

  • 在搜索 List 时,为什么 Enumerable.Any(Func predicate) 比带有 if 语句的 foreach 慢

    最近有件事引起了我的好奇心 Why is the Enumerable Any Func
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop

随机推荐

  • 在 Excel 中显示一段时间的弹出窗口

    我正在尝试生成一个在给定时间后关闭的弹出窗口WaitTime很快 我咨询过this链接和this link 我尝试应用 VBA Excel宏消息框自动关闭 我的代码如下 Sub TestSubroutine Dim TemporalBox
  • android 支持 PTRACE_SINGLESTEP 吗?

    好的 这是一个简单的问题 当我使用 ptrace 系统调用时 android 支持 PTRACE SINGLESTEP 吗 当我想ptrace一个android apk程序时 我发现我无法处理SINGLESTEP跟踪 但是当我使用PTRAC
  • 在 Weblogic 10.3 上调用 WebService 时未实现方法

    我开发了一个 Web 服务客户端来连接部署在 Weblogic 10 3 上的 Web 服务 尝试实例化客户端对象时总是得到相同的异常 java lang UnsupportedOperationException Method not i
  • 将年/周转换为日期对象

    字符串包含 YEAR WEEK 我想将其转换为parse date time 到日期对象 但我无法使代码工作 parse date time c 201510 YW 我不必使用润滑 也可以是其他包 在将年周转换为日期之前 您必须指定一周中的
  • iptables:复制/转发端口

    我正在尝试从阻止此端口的网络连接到 MySQL 端口 3306 但还有另一个端口 110 开放 我可以将其用于本例 我正在将 MySQL 用于其他应用程序 因此我不能简单地更改端口 我现在正在尝试通过 iptables 设置端口转发 确切地
  • NextJS 中 :global() css 模块选择器不纯的问题

    因此 我正在将应用程序从 CRA 迁移到 NextJS 并且我遇到了某些组件和页面的 module scss 文件的错误 Syntax error Selector global label primary is not pure pure
  • ssis xml 配置 - 配置覆盖包 - ssis 是否会在您不通知的情况下更改配置?

    昨天我工作了一整天 试图消除 XML 配置文件中错误连接字符串的影响 我检查了每个包 删除了有问题的连接管理器并使用正确的服务器名称重新添加它 每次我这样做时 我都会通过删除它来显式更新配置 然后使用覆盖选项重新添加它 但后来我犯了一个可怕
  • MongoDB:管理员无权执行命令

    当我使用时 我的 mongo shell 给了我这个错误show dbs命令 没有管理员权限执行命令 我尝试使用创建用户 db createUser user siteUserAdmin pwd password roles role us
  • 从环境中获取 xts 对象

    我已将 xts 对象存储在环境中 当这些对象存储在环境中时 我可以对它们进行子集化 即 就地 对它们进行操作吗 我可以通过引用这些对象来提取它们吗colname 下面是我要表达的内容的示例 environment in which to s
  • JavaScript 中的 numpy.random.choice?

    Numpy random choice 是一个很好的简单函数 它允许您根据某种概率分布对整数数组进行采样 gt gt gt np random choice 5 3 p 0 1 0 0 3 0 6 0 array 3 3 0 javascr
  • 如何在Spring Security中使用具有authentication-success-handler-ref等效功能的自定义过滤器

    我想将一些带有登录详细信息的参数传递给 spring security 例如某些项目 ID 然后我想根据用户类型重定向到页面 为此我正在使用自定义过滤器发送附加参数 我正在使用重定向身份验证成功处理程序参考 我的问题是 我在使用时遇到位置冲
  • 参数和局部变量有什么区别?

    为看起来一定像的事情道歉very愚蠢的问题 我目前正在通过 codecadamy 工作 这让我很失望 var greeting function name name sausage console log name greeting nam
  • 模式验证器对于 IP 地址正则表达式无效

    我正在使用以下正则表达式来验证IP 地址模式 b 25 0 5 2 0 4 0 9 01 0 9 0 9 3 25 0 5 2 0 4 0 9 01 0 9 0 9 b 我也在a中检查过正则表达式测试器而且效果很好 但是 当我在模式验证器中
  • 在 yii2 中获取日期时间时时间错误

    当我在 yii2 项目中获取日期时间时遇到问题 当我得到日期时间时 日期是正确的 但时间是错误的 我执行我的代码 结果是 2016 05 02 12 30 28 而我笔记本电脑上的时间是 19 30 有什么问题 我利用在印度尼西亚的时间 这
  • Java程序拥有16GB虚拟内存并且不断增长:这是一个问题吗?

    在 Mac OSX 5 8 上 我有一个 Java 程序 它以 100 CPU 运行很长一段时间 几天或更长时间 它是一个分析并发程序的模型检查器 所以这或多或少是预期的 然而 它的虚拟内存大小 如 OSX 的活动监视器中所示 在一天左右后
  • 使用 WCF 中的架构进行消息验证

    我想要的是用很少的属性 例如最小 最大 字符串长度等 来装饰我的数据契约 并获取为我的 SOAP 非 net 客户端生成的 XML 模式 经过在互联网上的一些研究 我发现了以下文章 http wcfsecurity codeplex com
  • 如何将nodeJS项目托管到firebase?

    我正在为该项目使用 Node Express 和更多其他依赖项 我想知道如何在 firebase 上托管这个项目 我的项目将有控制器 视图和任何其他文件夹以使项目成为可能 它已经有像 pug handlebars 这样的视图引擎 在线教程仅
  • C++ 中具有向量属性的 MPI 发送结构

    我想发送一个具有向量属性的结构 typedef struct int id vector
  • ggplot2 代码运行并更新绘图,但实际上没有显示数据

    我正在尝试使用生成图表ggplot2虽然我能够生成我想要使用的图表plot 当我运行下面的 ggplot 代码时 它会显示正确的轴 但没有数据或比例 数据看起来像这样 data lt data frame area c alpha alph
  • 由于 PreviewMouseLeftButtonDown,数据网格内的按钮未被触发

    我正在开发 WPF 应用程序 根据要求 我想在数据网格中显示项目列表 每行还有一个 删除 按钮 使用这个按钮我们可以删除相应的项目 我还想要网格的拖放功能 即用户可以向上 向下移动行 我在用 PreviewMouseLeftButtonDo