WPF 命中测试矩形区域

2023-12-20

我有一个 WrapPanel,其中包含任意数量的锯齿状大小的元素。我想为我的项目实现拖动选择。

如何对一个点进行 HitTest 似乎很明显,但如何找到矩形区域内的所有项目?


您可以使用VisualTreeHelper.HitTest http://msdn.microsoft.com/en-us/library/ms608753.aspx with a 几何命中测试参数 http://msdn.microsoft.com/en-us/library/system.windows.media.geometryhittestparameters.aspx论证和一个命中测试过滤器回调 http://msdn.microsoft.com/en-us/library/system.windows.media.hittestfiltercallback.aspx检查视觉对象是否是面板的直接子代。

像这样的事情:

var selectedElements = new List<DependencyObject>();

var rect = new RectangleGeometry(...);
var hitTestParams = new GeometryHitTestParameters(rect);

var resultCallback = new HitTestResultCallback(
    result => HitTestResultBehavior.Continue);

var filterCallback = new HitTestFilterCallback(
    element =>
    {
        if (VisualTreeHelper.GetParent(element) == panel)
        {
            selectedElements.Add(element);
        }
        return HitTestFilterBehavior.Continue;
    });

VisualTreeHelper.HitTest(
    panel, filterCallback, resultCallback, hitTestParams);

看起来有点复杂,但是HitTestFilterCallback有必要获取视觉树中的所有视觉对象,而不仅仅是那些实际被击中的视觉对象。例如,如果您的面板包含标签控件,则HitTestResultCallback只会为每个标签的 Border 和 TextBlock 子视觉对象调用。

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

WPF 命中测试矩形区域 的相关文章

  • 在 WPF 中创建一个漂亮的 GUI

    我需要创建一个桌面 CAD 应用程序 它本质上应该有一个漂亮的现代 GUI 我正在考虑创建一个 WPF 应用程序 以便拥有丰富的用户界面 有人能给我推荐一个设计良好的 WPF 桌面应用程序 GUI 框架吗 我在这个视频中发现了一些很酷的 G
  • 使用 uiAccess=True 安装桌面 WPF 应用程序时的注意事项

    背景 我需要在另一台显示器上创建调光效果 我想我通过使用 WPF 窗口解决了这个问题 该窗口占据了整个屏幕尺寸Topmost and AllowsTransparency 正确 它具有内部黑色发光效果并具有风格WS EX TRANSPARE
  • 如何以编程方式将焦点设置到已获得焦点的 WPF ListBox 中的 SelectedItem?

    我们想要设置SelectedItem of a ListBox以编程方式并希望该项目获得焦点 以便箭头键相对于该选定项目起作用 看起来很简单 然而问题是如果ListBox设置时已经有键盘焦点SelectedItem以编程方式 虽然它确实正确
  • 从 TransformedBitmap 对象中“跨越”困境

    我有一个 2208 x 3000 TransformedBitmap 对象 其格式为 Indexed8 我正在对其进行 CopyPixels 操作 我在用着 int formattedBitmap PixelWidth formattedB
  • C# 线程安全(特别是 MVVM/WPF)

    我想知道我需要做什么才能使模型在 MVVM 中线程安全 假设我有以下类 它被实例化为单例 public class RunningTotal INotifyPropertyChange private int total public in
  • 触发 OnPropertyChanged 的​​更好方法

    我们有一个遵循 MVVM 模式的 WPF 项目 在视图模型中有很多代码 如下所示 private string m Fieldname public string Fieldname get return m Fieldname set m
  • 接收事件时闪烁选项卡标题

    我有一个基于选项卡的聊天应用程序 用户可以在不同的选项卡项目中与几个人聊天 我想通过闪烁选项卡标题来通知用户传入消息 以防用户正在与接收消息的选项卡以外的其他用户聊天 我如何在 WPF 中实现这一目标 一些例子将非常有用 此致 莫尔泰萨 您
  • StockTrader RI > 控制器、演示者,WTF?

    我目前正在学习如何通过 Prism 复合 WPF 项目高级使用 WPF 我观看了很多视频和示例 演示应用程序 StockTraderRI 让我提出了这个问题 以下各部分的具体作用是什么 SomethingService 好的 这是管理数据的
  • 如何冻结WPF中的数据网格列

    冻结前两列 但如果我想像第三列或第四列那样动态冻结该列 我该怎么做 您可以使用变量FrozenColumnCount这将设置网格中冻结的最左边的列数 但是 如果您只想冻结第三列 那么我认为您需要编写一个自定义控件 在数据网格中 只能冻结最左
  • DispatcherTimer Stop 不停止

    更新 我把完整的代码放出来供参考 我正在尝试使用 Dispatcher 方法而不是 Forms Timer 我在方法结束时停止了 但在停止之前它一直循环多次 什么地方出了错 顺便说一句 我必须提到我确实在计时器 if 语句中使用了 Mess
  • 如何动态更改 WPF 中 DataGridTextColumn 绑定上的转换器?

    我真的不明白 WPF 和 XAML 并且继承了一些写得很糟糕的代码 所以我可能会扼杀它 但这里是 我继承了一个绑定到 Person 对象列表 在代码后面 的 DataGrid 其中必要的 DataGridTextColumn 在 XAML
  • 是否有其他方法可以在 C# 中使用 WPF 处理 DICOM 图像而无需任何第三方/库?

    我开始从事一个充满挑战的新项目 我正在从事一个医疗项目 我必须读取 DICOM 图像并利用其属性处理图像 我收集了一些关于 DICOM 和 PACS 的基本知识 由于我在 WPF 上工作了大约 2 年的职业生涯 因此我选择使用 C 和 WP
  • WPF:名称空间中不存在该名称[重复]

    这个问题在这里已经有答案了 我正在使用 VS2013 构建 C WPF 应用程序 并且具有以下类定义 在正在运行的应用程序的同一程序集中 namespace MyNamespace public class MyKey public MyK
  • WPF 数据绑定到字符串属性

    我有一个关于数据绑定的问题 我正在努力解决这个问题 我的 xaml cs 文件中有以下属性 private string stationIdInstruction public event PropertyChangedEventHandl
  • 获取登录用户的 AppData\Local 文件夹

    我目前正在使用 Environment GetFolderPath Environment SpecialFolder LocalApplicationData 检索当前用户的AppData Local小路 该程序需要提升的权限 并且在标准
  • WPF 依赖项属性:为什么需要指定所有者类型?

    这就是我注册的方式DependencyProperty public static readonly DependencyProperty UserProperty DependencyProperty Register User type
  • CanExecute 何时被调用?

    在演示中 我有一个按钮可以切换布尔字段isAsking 我创建了一个命令 该命令仅在以下情况下执行isAsking true 一旦我按下切换按钮 okButton IsEnable立即更改 这表明该命令发现了更改isAsking 我感到很困
  • WPF 用户控件;触发器和更改其他控件

    我创建了一个 WPF UserControl 其中包含一个按钮和一个组合框 我想根据鼠标的位置更改两者的样式 因此鼠标悬停的 UIElement 的颜色为黑色 另一个的颜色为红色 如果两者均未设置样式 则将应用默认样式 别担心 这个噩梦般的
  • wpf自定义控件:另一个矩形内的可拖动/可调整大小的矩形

    我正在研究一个带有两个矩形的控件 一个在另一个矩形内 我希望用户能够拖动内部矩形 调整其大小 如果可能的话 也可以在外部矩形的边界内旋转它 这些值应该是可绑定的 以便我可以在更新时将这些值存储在我的数据源中 是否已经有这样的控件或者有人有任
  • 在wpf中移动鼠标

    我目前正在寻找一种在 wpf 中移动鼠标的方法 我发现的只是我无法可靠实现的非托管方法调用 有没有一种简单的方法可以将鼠标光标移动到某个地方 即 双击后 我肯定在这里遗漏了一些东西 添加对System Windows Forms dll的引

随机推荐