问题标签 [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.
wpf - 在 WPF 中,如何在 DataGrid 之上显示 AdornerLayer
我正在使用来自 codeplex 的 WPF 数据网格。我正在使用 DatagridTemplateColumn 并且我已经编写了数据模板来显示每列中的内容。
现在我必须在 datagrid 中的任何控件聚焦时向用户显示一些帮助消息。为此,我想到了使用装饰层。我使用了 ComboBox 加载事件并访问了它的 adrorner 层。然后我添加了我自己的装饰层,其中显示了一些类似于工具提示的东西。下面是代码。
PEAdorner层是这个::
现在问题如下。我附上了它在数据网格中的外观的屏幕截图。如果数据网格有超过 4 行,一切都很好。下面是截图
如果数据网格的行数较少,则此装饰器进入数据网格内部并且对用户不可见。截图如下
如何在 DataGrid 上方获得这个装饰层?请帮我 !!!
wpf - 单击按钮时更新装饰器中的文本
我创建了我的自定义装饰器,用灰色画布覆盖我的主窗口,中间有一个文本块,以在我处理其他窗口时显示一些状态文本。
我目前正在做的是从我的资源中获取所需的装饰器元素(即带有文本块的画布)并将其传递给我的视图构造函数中的装饰器,如下所示 -
但是我想在某些情况下更新文本块中的文本说如果我点击其他窗口中的某个按钮但是如何动态更新文本?
资源文件中的装饰元素-
让我知道是否需要其他代码或方法..
c# - 装饰器与装饰元素上方的控件重叠
嘿,我对装饰器有疑问。我创建了调整大小的装饰器,它有四个 Thumb 控件,一个用于装饰控件的每个角。控件正在画布上绘制,用户可以选择它并调整它的大小。画布托管在 ZoomBoxPanel 控件上,该控件基本上将 ScaleTransform 和 TranslateTransform 应用于整个事物以提供缩放和平移支持。
问题是,当一个项目超出缩放面板的范围时,并且项目按照您的预期进行裁剪(例如当您设置 ClipToBounds = true 时),您仍然可以看到装饰器!谁能告诉我一种防止这种情况的方法?
证据。黑色方块是选中的那个,两个调整大小的拇指是可见的(右),其他的不应该是可见的(左)
谢谢!!
.net - WPF 装饰器有什么意义?
我最近为我的公司开发了一个绘图组件,其中包含一个 Canvas,您可以在其上使用单击并拖动来绘制某些形状。对于每个形状,我在其 AdornerLayer 上放置了两个装饰器:一个用于增加命中检测(基本上是一个透明矩形,将超出形状的边界几个像素),另一个用于调整大小(角落上的四个 Thumb 控件)。
但是,在实现组件的一些功能时,我遇到了很多问题,这些都是与装饰器相关的。
他们捕获了所有预览事件,因为它们位于画布本身之外的另一个视觉树中,这是出乎意料的,但我找到了一种解决方法,即使我不太喜欢它。使用 AdornerDecorator 并没有解决这个问题,我实现的选择装饰器是预览事件的黑洞。
当我在 Canvas 上实现形状的 z-index 操作(发送到后面、带到前面等)时,它使用 Panel.SetZIndex 可以正常工作,正如您所期望的那样。但是,装饰器在另一个视觉树中!因此它们不会受到影响,并且选择装饰器仍然位于所有其他形状之上,即使这些形状位于选择装饰器正在检测命中的形状之上。例如:Shape1、SelectionAdorner1。形状 2,选择装饰器 2。Shape1 位于 Shape2 的顶部(稍后添加到画布),因此它与它重叠。因此,SelectionAdorner1 将检测到单击它。我操纵 ZIndex 将其发送到后面,现在 Shape2 位于顶部并与 Shape1 重叠。我单击 Shape2 的顶部,但单击是由 SelectionAdorner1 而不是 SelectionAdorner2 检测到的。这特别烦人。所以,显然,由于 Adorners 在另一棵可视化树上,它们不尊重 ZIndexes。我试图通过在形状的 ZIndex 和其 SelectionAdorner 的 ZIndex 之间创建一个 DataBinding(也可以通过手动设置)来解决它。但这并没有解决问题。更改 Adorners 的 ZIndex 并不会影响它们在屏幕上的显示方式,也许我错过了一些东西,但它不应该真的这么难,因为 Adorners 应该让事情变得更容易。我能想出的唯一解决方案是手动删除所有装饰器,然后一个接一个地手动添加它们,最后添加应该在顶部的那个。那是迟钝的,但它起作用了。我试图通过在形状的 ZIndex 和其 SelectionAdorner 的 ZIndex 之间创建一个 DataBinding(也可以通过手动设置)来解决它。但这并没有解决问题。更改 Adorners 的 ZIndex 并不会影响它们在屏幕上的显示方式,也许我错过了一些东西,但它不应该真的这么难,因为 Adorners 应该让事情变得更容易。我能想出的唯一解决方案是手动删除所有装饰器,然后一个接一个地手动添加它们,最后添加应该在顶部的那个。那是迟钝的,但它起作用了。我试图通过在形状的 ZIndex 和其 SelectionAdorner 的 ZIndex 之间创建一个 DataBinding(也可以通过手动设置)来解决它。但这并没有解决问题。更改 Adorners 的 ZIndex 并不会影响它们在屏幕上的显示方式,也许我错过了一些东西,但它不应该真的这么难,因为 Adorners 应该让事情变得更容易。我能想出的唯一解决方案是手动删除所有装饰器,然后一个接一个地手动添加它们,最后添加应该在顶部的那个。那是迟钝的,但它起作用了。因为装饰器应该使事情变得更容易。我能想出的唯一解决方案是手动删除所有装饰器,然后一个接一个地手动添加它们,最后添加应该在顶部的那个。那是迟钝的,但它起作用了。因为装饰器应该使事情变得更容易。我能想出的唯一解决方案是手动删除所有装饰器,然后一个接一个地手动添加它们,最后添加应该在顶部的那个。那是迟钝的,但它起作用了。
其次,装饰者不尊重 ClipToBounds!我在画布上设置 ClipToBounds=true,效果很好,但该死的装饰器仍然可以工作!解决这个问题的方法相对简单,我只是在每个 Shape 的顶部添加了一个 AdornerDecorator。IMO 不是一个理想的解决方案,但足够简单。
装饰者并不总是对在其装饰元素上执行的 LayoutTransform 反应良好。我在画布顶部有一个面板,它实现了缩放和平移功能。它使用动画使放大和缩小更加平滑。但是使用动画导致我的 Adorners 变成了猿猴!第一次缩放他们将简单地忽略调整大小并保持相同的大小和位置,在第二次缩放时他们将缩放到装饰元素的先前大小。那没有任何意义!我能找到的唯一解决方案是禁用动画,谢天谢地
我不太记得我还有哪些其他问题,但这足以让我怀疑 Adorner 的用处,我正在认真考虑在我的下一个项目中不使用它们,这与我描述的类似.
那么,谁能告诉我使用这些看似有用但令人难以置信的烦人的东西可能有什么好处?
谢谢。
wpf - 为什么 FrameworkElement.VisualChildrenCount 受到保护?
这是我的问题的背景:
- 我想知道一个特定
System.Windows.Documents.AdornerLayer
的是否为空。 - “好的,我去检查一下
myAdornerLayer.VisualChildrenCount > 0
。” - “哦,好吧,财产
AdornerLayer.VisualChildrenCount
受到保护。” (它覆盖System.Windows.FrameworkElement.VisualChildrenCount
了也受保护的。) - “嗯……这不会阻止我。我只是
myAdornerLayer.VisualChildrenCount
通过反射访问。” - “另一方面,也许这样做会产生某种不良的副作用。也许
VisualChildrenCount
受到保护是有原因的。我会问 Stack Overflow”。
如果使用反射是一个坏主意,您是否有另一种方法来确定 anAdornerLayer
是否为空?
c# - 在 RichTextBox 中打印装饰层
我有一个richTextBox
编辑器,其中包含adorner
每个单词顶部的图像层。
我想以良好的格式打印文档并打印adorner
图片图层。
有没有办法我可以做到这一点?
我试过PrintDialog
了,但它没有打印装饰层。
wpf - 装饰师没有出现
我正在使用包含 Canvas 的 UserControl。作为画布的孩子,有装饰器的内容控制。为什么装饰器是不可见的,也许装饰器层是ceated。一切都是创建和附加的。装饰层在视觉树中非常高。装饰层放置在 UserControl 之外。
我知道这是因为我实现了有效的基本运动机制,但装饰器从未出现过。
必须做什么才能向装饰者展示?
wpf - 如何确保装饰层中的验证显示在其他控件后面
我有一个具有用户验证的 WPF 应用程序。根据文档,这是在装饰层中呈现的,该层出现在所有其他层之上。
在屏幕截图中,您可以看到这不是我想要的。我有一个名为“警报详细信息”的弹出窗口,它ChildWindow
来自Extended WPF Toolkit。它位于装饰层后面。如何使弹出窗口出现在装饰层前面?
我已经尝试Panel.ZIndex
在 ChildWindow 上设置一个非常高的值,但这并没有什么不同。
wpf - 将鼠标移到richtextbox中的装饰器上时,WPF丢失插入符号位置
我的richtextbox 中有一个装饰层。每当一个单词拼错时,我都会在richtextbox 的装饰层中添加一个装饰器。我希望能够右键单击装饰器并捕获该事件,但是当鼠标悬停在装饰元素上时,我不想丢失richtextbox 的插入符号。
我试过设置 IsHitTestVisible=False。当我像我想要的那样在装饰元素上方时,这可以防止鼠标变为指针,以便我可以单击底层的richtextbox,但它会使鼠标右键单击捕获复杂化。
这使我可以捕获鼠标右键单击,但它似乎仅在我单击 adornedElement 底部的右侧时才起作用。如果我尝试单击 adornedElement 的主体,它不会在 hitTesting 中找到它。
我是正确地解决这个问题还是有更好的方法来允许底层控件在其上方的元素需要能够接受鼠标事件时保持它的光标。
谢谢您的帮助!
c# - 如何更改 Wpf AdornerLayer 孩子的 z 顺序?
我有一个图像编辑应用程序,并且我有添加到 AdornerLayer 的自定义装饰器。当用户点击一个装饰器时,我想把它带到顶部——这意味着如果它被拖到另一个装饰器上,我希望第一次点击被最上面的装饰器捕获。
我不知道如何更改 AdornerLayer 的子元素的 z 顺序。它似乎不允许我对它们进行排序。即使我删除并重新添加装饰器,它也不会成为最上面的。