【问题标题】:WPF Moving Adorner outside the AdornerLayer or WindowWPF 将 Adorner 移动到 AdornerLayer 或窗口之外
【发布时间】:2011-03-23 05:25:00
【问题描述】:

我有一个随着鼠标光标移动的装饰器。然而,一旦鼠标移出窗口,装饰器就会被切断。

是否可以将装饰层扩展到整个屏幕或创建一个新的装饰层。

【问题讨论】:

  • 嗨!我想使用相同的(装饰器在窗口边界外用鼠标移动)用于跨应用程序拖放功能。您找到解决方案了吗?下面所有提到的文章仅涵盖在同一应用程序窗口的内部移动装饰器......提前谢谢。

标签: wpf adorner adornerlayer adornerdecorator


【解决方案1】:

您可能可以这样做,但我不确定您想要对装饰层做什么。只要窗口有焦点,我的解决方案将只允许装饰器跟随鼠标。请分享您的最终目标,以便我更好地帮助您。

我的想法是创建一个具有透明背景的全屏无边框窗口,以容纳您想要的任何控件。窗口的不透明部分将位于网格内。

  1. 创建一个新窗口。将其 WindowBorderStyle 设置为“None”,将 Width 和 Height 设置为“Auto”,将“WindowState”设置为“Maximized”。 (我目前没有看 IDE,所以属性名称可能略有偏差。)

  2. 在原始窗口中复制网格(或您正在使用的任何主要容器)的 XAML 代码,然后将其粘贴到新窗口中。确保将新窗口中的空网格替换为您粘贴的网格。

这应该允许您让装饰层跟随鼠标在整个窗口周围。

再次,在此处发布您的确切目标,以便我可以给出更适合您特定需求的答案。

【讨论】:

    【解决方案2】:

    也许他想绘制选择区域 我遇到了同样的问题,但你可以看到下面的链接,它有效。 http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-2
    我发现当背景透明时你无法接收鼠标事件。如果你给装饰器一些背景,那么一切都好。

    protected override void OnRender(DrawingContext dc) {
        dc.DrawRectangle(bg, null, new Rect(RenderSize));
        dc.DrawRectangle(Brushes.Red, null, new Rect(start, end));
    }
    

    bg画笔就像,

    private Brush bg = new SolidColorBrush(Color.FromArgb(0x01, 0, 0, 0));
    

    【讨论】:

      猜你喜欢
      • 2017-07-12
      • 2010-09-24
      • 2016-02-27
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多