当您使用谷歌搜索此类问题时,您会获得大量点击,但所有解决方案都假设您至少有一个窗口.
但我的问题就像我说的那样 - 根本不是假设.我可以有一个窗口,但我可以有零窗口(因为我甚至没有显示一个窗口,或者我只关闭了最后一个窗口).因此,简而言之,解决方案不能依赖于任何窗口小部件或窗口 - 唯一已知的是,是否存在桌面(和应用程序正在运行,但它没有任何窗口).
所以问题是 - 如何获得鼠标位置?
我想显示以鼠标位置为中心的窗口.在WPF中没有这样的模式(只有所有者的中心,或者屏幕的中心)所以我必须手动完成.缺少的部分是鼠标位置.
谢谢大家,所以现在我有解决方案的第一部分 - 原始位置.现在有一个问题如何转换WPF的数据.我发现了这样一个主题: WPF像素到桌面像素, 但又一次,它假设有一些窗口.
然后我google了更多,我找到了解决方案:http: //jerryclin.wordpress.com/2007/11/13/creating-non-rectangular-windows-with-interop/
代码包括仅依赖于桌面信息的放大/缩小坐标的类.所以加入这两件,我终于得到了解决方案:-).再次感谢.
我没有在Google或Stack Overflow上找到任何有用的东西,或者根本没有答案(或者也许我只是不知道要搜索什么)-我能找到的最接近的问题是:在性能低下的原因WPF
但是我想在这个简单的程序中解决这个滞后的原因,也许我只是做的不好。
我正在UI元素的OnRender()中渲染大约2000个点,并且它们之间有线,实际上是在创建线图。没关系,但我想使用MouseMove平移图形。效果很好,但问题是LAG。每当我用鼠标拖动时,我都会期望平滑的更新,我认为重绘2000点并在它们之间有线是在i5 CPU上漫步。但是,即使在我家里的笔记本电脑上分辨率很低时,它的速度也非常慢。因此,我检查了性能分析器。OnRender()函数几乎不使用任何CPU。
事实证明,正在更改和使用大量CPU的是Layout。
“版式”花费最多的时间来完成
现在,我听到了术语“视觉树”的话题,但是在这个简单的项目中几乎没有任何视觉效果。只是主窗口上的UI元素。而且它使用的是绘图上下文,我以为绘图上下文就像位图一样绘制,或者它是使用自己的事件/命中框等绘制UI元素的?因为我想要的只是让UIElement像图像一样工作,而且还要处理鼠标事件,所以我可以拖动整个对象(或使用鼠标滚轮缩放)。
所以问题:
来源如下:
.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)