问题标签 [adornerlayer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1428 浏览

wpf - WPF:为什么 CaptureMouse 可能会失败?

我有一个非常复杂的视图,其中选项卡控件中有多个选项卡。在一个选项卡上有一个带有装饰层的控件。装饰层在 MouseLeftButtonDown 事件处理程序中调用 CaptureMouse 以捕获鼠标输入。一切正常。

但是,如果我以特定顺序切换视图上的选项卡,然后单击装饰层,则无法捕获鼠标输入:CaptureMouse() 返回 false。同时 Mouse.Captured 返回 null。承载装饰层的控件继续正常工作,甚至能够捕获鼠标。

无法提供任何代码,因为有许多自定义控件在起作用。在简化的布局中,一切正常。

CaptureMouse 可能会失败的任何建议?

0 投票
1 回答
982 浏览

wpf - 剪裁装饰层

我有一个PanZoomImage这样定义的类:

有时我想在图像上显示装饰器,所以我有一个属性可以为我AdornerLayer提供图像:

我使用此属性为图像添加不同的装饰器。问题是当我平移或缩放图像时, aodrners 不会被剪裁并显示在包含 的控件之外PanZoomImage,如下所示: 无剪裁

我尝试了几种解决方案:

我尝试设置ClipToBounds=True边框、画布和图像。

我尝试为每个 Adorner 分别设置ClipToBounds=TrueAdornerLayer

我尝试在 Adorner 的 OnRender 中设置剪辑几何。

我还注意到IsClipEnabledAdorner 有一个属性,但是当我尝试将其设置为 true 时,我不断收到 NullReferenceException(即使 Adorner 绝对不为空)...

谢谢!

0 投票
2 回答
2546 浏览

wpf - 为什么 AdornerLayers 总是最顶层?有没有办法改变它?

  1. 为什么装饰层总是呈现为应用程序中的最顶层(在 AdornerDecorator 下 - 参考屏幕截图)?
  2. 有没有办法改变可以绘制装饰器的图层/级别?

在下面的屏幕截图中,AdornerLayer 被添加到 AdornerDecorator 并且 Adorner (MyAdorner) 被添加到这个 AdornerLayer。但是 AdornerLayer 是这样检索的,

AdornerLayer - 大纲

0 投票
1 回答
644 浏览

wpf - 获取特定 ListViewItem 相对于它拥有的 ListView 的坐标

我正在尝试确定代表 ListViewItem 的容器的物理坐标(特别是我对 TOP 和 BOTTOM 感兴趣)。

我通过以下方式引用了 ListViewItem:

我现在需要获取该项目并找出它的顶部和底部值相对于整个列表视图。这是为了在拖放过程中显示拖线指示器。

任何人都可以提供任何见解吗?

谢谢

0 投票
1 回答
1997 浏览

wpf - 确定 ListViewItem 在 WPF ListView 中是完全可见还是仅部分可见

我有一个 WPF 列表视图。此 ListView 将包含 n 个项目。

当用户将某些东西拖到列表视图中时,我在 ListView 的 AdornerLayer 上显示一个水平条,以显示将插入该项目的索引。

我也在自动滚动列表视图。因为 ScrollViewer.CanContentScroll="False" ListViewItems 是部分可见的。

我遇到的问题是,当我结束的 ListViewItem 位于顶部且仅部分可见时,我正在绘制的指示条出现在 ListView 的边界之外(在我上面的例子中)。

绘制条的触发器是获取我当前悬停在上面的任何 ListViewItem,抓住它的上界值并画线。当 ListViewItem 尚未完全可见时,条形图绘制在 ListView 本身之上,显然看起来很奇怪。

摘要:试图确定给定的 ListViewItem 在 ListView 中是否仅部分可见。

在这种情况下,代码并不是那么相关,但如果你愿意,我可以发布一些。

谢谢

0 投票
1 回答
788 浏览

wpf - WPF 装饰器与自定义装饰器?

我想创建一个图表编辑器,并且需要移动和调整大量项目的大小。

而且我还听说默认的 WPF 装饰器很慢。

使响应式崇拜者分层的最佳方法和建议是什么?自定义还是基于 WPF 内置的装饰器?据我所知,表达式混合也在使用它自己的装饰器实现。

对我来说,性能比实施时间更重要。

谢谢。

0 投票
1 回答
3690 浏览

c# - AdornerLayer.GetAdornerLayer() return NULL for all controls in a Panel

I'm facing the fact that i cannot understand Well how AdornerLayer is added for UIElements.

I have such a situation:

I have a WPF Form which is built with 3 controls: A Grid on which are 1 Button and 1 TextBox. enter image description here

In my System, when I click to open this Form, all 3 elements have AdornerLayer not null .

The collection controlsWithAddorner contains all my 3 controls.

The method GetUIElements(FrameworkElement parent) returns an IEnumerable<FrameworkElement> in which are all controls within a Panel.

I have such a functionality: Refresh Form Designer. Which recreates the xaml for that Form.

After that Refresh is done, I check the list of controls for AdornerLayer. For all controls the AdornerLayer is null.

The problem is here, I cannot understand where AdornerLayer (s) are lost? Should I take care To add them forr each UIElement when I Refresh the Designer of the Form?

Please advice me with some suggestions.

Thank you!


EDIT: I'll show all the solution if other will encounter such problems :)

The mission is: When there is a SelectedControl in designer, keep it selected even a RefreshDesigner is done.

enter image description here

RefreshDesigner functionality recreates the xaml for the whole form.

Firstly: The xaml of the Form is Updated by using the ParseXaml() method from XamlProvider

Secondly: Content.UpdateLayout(); Ensures that all visual child elements of this element are properly updated for layout. MSDN Official source

After that, All elements have AdornelLayer not Null and I'm able to set the Adorner Border for preciosly selected control in designer.

0 投票
2 回答
1609 浏览

c# - 您可以将装饰器的位置附加到装饰元素的左上角以外的任何位置吗?

除了左上角之外,我找不到任何将装饰器固定到装饰元素的另一个点的方法。我知道您可以通过实现 ArrangeOverride 相对于这一点移动装饰器,但坐标系统始终基于左上角。

有任何想法吗?

0 投票
1 回答
1108 浏览

c# - 如果我缩放图片 WPF,AdornerLayer 会超出边界

我创建了裁剪包含在网格内边框内的图像的逻辑。网格有很多边框,所以这个网格会有很多图片。问题是,当我缩放图片时,逻辑会缩放图片(没关系),但是当我使用裁剪逻辑时,AdornerLayer会像图片一样超出边框:使用裁剪选择器缩放的图像

在这张图片上,图片没有缩放,所以AdornerLayer是正确的:在此处输入图像描述

我用来将裁剪添加到图像的代码:

在这种情况下,名为 fel 的对象是我要裁剪的图片,而 Border 是他的父对象。

如果图像被缩放,我如何解决 AdornerLayout 超出范围的问题?

0 投票
0 回答
112 浏览

wpf - 在 Windows 窗体控件之上绘制

对于我当前的项目,我需要显示一个 PDF,然后在其上绘制。我使用 Adob​​e Reader 作为 PDF 查看器,因为它可以托管在 Windows 窗体控件中,而该控件又可以托管在 WPF 应用程序中。但是,我无法绘制此控件。

似乎有几种方法可以解决这个问题,但在我的一生中,我似乎找不到适合我现有代码的通用解决方案的好例子。我能看到的最常见的解决方案是 Adorner/Layer/Decorators,但我找不到一种方法将它们以不会破坏应用程序的方式将它们放入我的 XAML。

我当前的 XAML 如下:

在 PDF 查看器之上,我需要的是一堆在运行时定义的形状。任何有关允许我将这些形状粘贴在其上的方法的建议将不胜感激。

谢谢!