问题标签 [adornerdecorator]

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 投票
1 回答
3280 浏览

wpf - AdornerDecorator 和制表位问题

我正在使用 IDataErrorInfo 来验证和指示文本框中的错误。我发现我必须为文本框和 adornerdecorator 标记一次。

我有一个错误模板:

一个文本框模板:

并声明一个这样的文本框:

如果装饰器是上面的一个文本框,那么我点击一次以离开文本框,一次离开“装饰”(似乎)然后盒子必须依次返回所有“装饰品”。当在装饰中切换时,焦点位于控件模板中定义的红色边框上。

有任何想法吗?

谢谢

0 投票
1 回答
747 浏览

wpf - HwndSource 不显示 Adorner 层

当我在 HwndSource 中托管使用​​装饰器(文本框的错误边框)的 WPF 控件时,不会显示装饰器。装饰层似乎不存在。为什么会这样,我能做些什么呢?这是一个已知的错误?

0 投票
0 回答
731 浏览

.net - 让一些装饰者通过的 AdornerDecorator?

问题:是否有可能创建一个AdornerDecorator只需要Adorner我想要的 s 的AdornerLayer

如何AdornerDecorator在 a中添加TextBox,并将该装饰器放在该层中?当然,在行为内部,设计师不应该关心添加所有AdornerDecorator具有装饰器的元素......

最好只有这个装饰器应该去那里,而不是偷走所有其他的装饰器。

在创建装饰器时,您无法预测装饰器出现在哪一层......

除非你创建AdornerDecorator. 而已!您无法提前知道它们出现在哪一层,它们并非设计为以这种方式工作。这让整个事情变得非常痛苦。

想象一下,您正在创建仅适用于TextBox. 为了让它发挥作用并按照你的要求行事,TextBox你需要AdornerDecorator让你的装饰者保持在TextBox.

  1. 你如何创建AdornerDecorator来包装你要装饰的元素?哦,是的,在创建装饰器期间这是不可能的(我不知道)。
  2. 如果您以某种方式设法创建AdornerDecorator,您仍然会遇到问题:它会窃取孩子中的所有装饰器,并放入这一层。再一次...... WTF!我怎么能假设所有的子元素装饰器,即使是我没有创建的,都应该去这一层?

换句话说,如果您不具体了解所有子元素及其装饰器,则无法控制装饰器出现的层。当创造无辜的洒水时,这就是全部的知识。

解决方法的可能性:

  1. 创建只抓取我们知道我们想要的装饰器的特殊 物品,其他的它会放手到下一个“全球”AdornerDecorator。AdornerDecorator
  2. 不知何故,让装饰器用这个装饰器包裹装饰元素的内部,并在这个装饰器中添加我们的装饰器。

我不喜欢这种解决方法,但糟糕的设计决策有时需要非常丑陋的黑客攻击......我认为这次我们需要这个。

0 投票
2 回答
2515 浏览

wpf - WPF 将 Adorner 移动到 AdornerLayer 或窗口之外

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

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

0 投票
1 回答
2195 浏览

wpf - Scrollviewer 中的错误装饰器

我试图确保我的错误装饰器不会被我的滚动查看器限制。我有一系列位于固定宽度滚动查看器边缘的文本框(没有水平滚动,只有垂直)。然后我有装饰器标记有错误的文本框。

问题是装饰器在滚动查看器的边缘被剪裁。

有任何想法吗?

*注意:我尝试将所有内容都包装在 AdornerDecorator 中。

0 投票
1 回答
1570 浏览

wpf - WPF-验证-验证错误消息由于 AdornerDecorator 而落后于其他控件

如果文本框有错误,我已经在 ViewModel 中实现了 IDataErrorInfo 以返回一个字符串。

但是此错误消息位于 UI 上的其他控件之后,如下所示。

替代文字

下面是xaml:

请让我知道如何使用 AdornerDecorator 以使错误消息与其他控件重叠并且不会落后。

我的应用程序是这样的,如果我不使用 AdornerDecorator,则根本不会显示错误消息。

0 投票
1 回答
844 浏览

wpf - 单击按钮时更新装饰器中的文本

我创建了我的自定义装饰器,用灰色画布覆盖我的主窗口,中间有一个文本块,以在我处理其他窗口时显示一些状态文本。

我目前正在做的是从我的资源中获取所需的装饰器元素(即带有文本块的画布)并将其传递给我的视图构造函数中的装饰器,如下所示 -

但是我想在某些情况下更新文本块中的文本说如果我点击其他窗口中的某个按钮但是如何动态更新文本?

资源文件中的装饰元素-

让我知道是否需要其他代码或方法..

0 投票
1 回答
2752 浏览

.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 的用处,我正在认真考虑在我的下一个项目中不使用它们,这与我描述的类似.

那么,谁能告诉我使用这些看似有用但令人难以置信的烦人的东西可能有什么好处?

谢谢。

0 投票
2 回答
2930 浏览

wpf - UserControl 中经过验证的文本框

我创建了一个 UserControl - 一个TextBox工作得很好的 Labeled,除了验证模板。当出现错误时,验证控制模板会显示出来,但它会填满包括标签在内的整个空间。我只希望它和TextBox. 如何解决这个问题?

这是xml:

0 投票
1 回答
446 浏览

java - 使用 pico 容器设置多个装饰器

我一直在使用 java 中的 pico 容器为我设计的 minecraft 插件框架做 DI。

插件具有在接口中定义的事件侦听器方法,每个接口一个方法。

如果一个特定的类在玩家加入和离开服务器时想要事件,它实现了两个特定的接口;在这种情况下 IPlayerLoginEvent 和 IPlayerQuitEvent。

然后我在框架中有一个类,它将每种类型的事件接口作为构造函数注入的参数。

这个容器类被标记为@Listener 以便craftbukkit 服务器软件调用它。

包装类使用特定于框架的类包装craftbukkit 发送的数据,至少在理论上,可以编写与服务器无关的插件。

小例子:

插件 AwesomePlugin 有一个实现 IPlayerLoginEvent 和 IPlayerQuitEvent 的 PlayerHandler 类。然后,框架需要构造每个类“PlayerLogin”和“PlayerQuit”的实例,将 PlayerHandler 作为构造函数参数传入。PlayerLogin 和 PlayerQuit 实例将依次向 CraftBukkit 注册为事件侦听器。

目前使用 pico 实现的方式可以在这里看到:

https://github.com/Runsafe/Framework/blob/master/src/no/runsafe/framework/event/EventEngine.java#L32

该代码确实看起来很糟糕,我无法为这种情况找到更优雅的解决方案,所以我现在恳求您的指导:)