【问题标题】:WPF Application moves offscreen during remote access sessionWPF 应用程序在远程访问会话期间移出屏幕
【发布时间】:2009-09-08 12:45:27
【问题描述】:

我有一个问题,我希望找到最好和最容易实施的解决方案。

我写了一个 WPF 应用程序,它可以在桌面上拖动,但我通常把它放在屏幕的右上角。

我的问题是,当我从另一个位置远程拨号时 - 分辨率总是较低 - 应用程序不在屏幕上,除非我终止进程并重新启动它,否则我无法恢复它。

我已经想到了一些想法,以使其始终保持可见。

1] 每当它运行时,都会生成一个子线程,用于检查循环中的可见分辨率。当它超出检测到的范围时,它将更新其位置。

2] 当我远程进入时,使用某种消息传递系统向它发送消息 - 这将触发它重新调整自身。

大家有什么建议吗?

【问题讨论】:

    标签: c# wpf screen location resolution


    【解决方案1】:

    您可以有一个 DispatcherTimer 定期(每隔几秒)触发,以确保窗口位于可见屏幕之一上。如果不是,它会重新定位,以便它是。

    您可以使用 System.Windows.Forms.Screen 类来访问有关用户桌面和屏幕设置的信息,即使您使用的是 WPF。

    类似:

    bool isWithin = false;
    foreach (Screen screen in Screen.AllScreens)
    {
        if (screen.Bounds.Contains(windowLocation))
            isWithin = true;
    }
    
    // if !isWithin, move to 0,0
    

    【讨论】:

    • 感谢 draw - dispatchertimer 与新线程有何不同?
    • 由于需要对齐右上角的额外要求,您需要像这样访问屏幕边界。 +1
    • 不客气。 DispatcherTimer 将在 UI 线程上触发。这意味着您可以修改 UI 属性而不会出现跨线程异常。避免使用新线程通常是个好主意,因为它们会占用额外的资源,并且您必须记住在关闭应用程序时好好清理它们。
    • 看看当你违反 MS 设计准则时你必须做什么样的奇怪的事情。赫夫。
    猜你喜欢
    • 2013-07-26
    • 2014-09-29
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 2023-01-24
    • 2017-08-23
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多