相关疑难解决方法(0)

如何在WPF中获取与桌面相关的鼠标位置?

问题

当您使用谷歌搜索此类问题时,您会获得大量点击,但所有解决方案都假设您至少有一个窗口.

但我的问题就像我说的那样 - 根本不是假设.我可以有一个窗口,但我可以有零窗口(因为我甚至没有显示一个窗口,或者我只关闭了最后一个窗口).因此,简而言之,解决方案不能依赖于任何窗口小部件或窗口 - 唯一已知的是,是否存在桌面(和应用程序正在运行,但它没有任何窗口).

所以问题是 - 如何获得鼠标位置?

背景

我想显示以鼠标位置为中心的窗口.在WPF中没有这样的模式(只有所有者的中心,或者屏幕的中心)所以我必须手动完成.缺少的部分是鼠标位置.

编辑

谢谢大家,所以现在我有解决方案的第一部分 - 原始位置.现在有一个问题如何转换WPF的数据.我发现了这样一个主题: WPF像素到桌面像素, 但又一次,它假设有一些窗口.

然后我google了更多,我找到了解决方案:http: //jerryclin.wordpress.com/2007/11/13/creating-non-rectangular-windows-with-interop/

代码包括仅依赖于桌面信息的放大/缩小坐标的类.所以加入这两件,我终于得到了解决方案:-).再次感谢.

c# wpf mouse position

7
推荐指数
1
解决办法
1万
查看次数

WPF MouseMove InvalidateVisual OnRender更新非常慢

我没有在Google或Stack Overflow上找到任何有用的东西,或者根本没有答案(或者也许我只是不知道要搜索什么)-我能找到的最接近的问题是:在性能低下的原因WPF

但是我想在这个简单的程序中解决这个滞后的原因,也许我只是做的不好。

我正在UI元素的OnRender()中渲染大约2000个点,并且它们之间有线,实际上是在创建线图。没关系,但我想使用MouseMove平移图形。效果很好,但问题是LAG。每当我用鼠标拖动时,我都会期望平滑的更新,我认为重绘2000点并在它们之间有线是在i5 CPU上漫步。但是,即使在我家里的笔记本电脑上分辨率很低时,它的速度也非常慢。因此,我检查了性能分析器。OnRender()函数几乎不使用任何CPU。

MouseMove和OnRender几乎不占用太多CPU

事实证明,正在更改和使用大量CPU的是Layout。

布局使用最多的CPU

“版式”花费最多的时间来完成

布局花费最多的时间 它说对Visual树进行了更改-但未进行任何更改-仅调用了InvalidateVisual

现在,我听到了术语“视觉树”的话题,但是在这个简单的项目中几乎没有任何视觉效果。只是主窗口上的UI元素。而且它使用的是绘图上下文,我以为绘图上下文就像位图一样绘制,或者它是使用自己的事件/命中框等绘制UI元素的?因为我想要的只是让UIElement像图像一样工作,而且还要处理鼠标事件,所以我可以拖动整个对象(或使用鼠标滚轮缩放)。

所以问题:

  1. 如果Layout造成速度缓慢/滞后,如何防止这种情况?
  2. 我还注意到有很多垃圾收集是有意义的,但是我不希望它在渲染期间发生。我宁愿在闲置时这样做。但是如何?

来源如下:

.cs文件

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Windows;
using System.Windows.Media;

namespace SlowChart
{
    public class SlowChartClass : UIElement
    {
        List<Point> points = new List<Point>();

        double XAxis_Width = 2000;
        double XAxis_LeftMost = 0;

        double YAxis_Height = 300;
        double YAxis_Lowest = -150;

        Point mousePoint;
        double XAxis_LeftMostPan = 0;
        double YAxis_LowestPan = 0;

        public SlowChartClass()
        {
            for (int i = 0; i < 2000; i++)
            {
                double cos = …
Run Code Online (Sandbox Code Playgroud)

c# wpf drawingcontext uielement

4
推荐指数
1
解决办法
762
查看次数

标签 统计

c# ×2

wpf ×2

drawingcontext ×1

mouse ×1

position ×1

uielement ×1