问题标签 [adorner]

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 投票
0 回答
373 浏览

wpf - 这是装饰器的BUG吗?

我在使用装饰器时遇到了一个奇怪的问题。通过使用从 Adorner 继承的类,我尝试在 ScrollViewer 中动态绘制一条线。当线条短于特定长度(约 600 条)时效果很好,但如果我试图滚动 ScrollViewer 并绘制更长的线,问题来了。线似乎被剪裁了,其余超过 600 的部分似乎不可见。我检查了线路的X1,X2,Y1,Y2,它似乎是正确的。您能给一些建议吗?非常感谢!

这是我的装饰类


通过使用 MouseMove 事件来绘制线条

0 投票
1 回答
1448 浏览

wpf - WPF 装饰器覆盖问题

我试图在不使用 Popup 的情况下实现类似于 Popup 的功能,而是用基本的装饰器来装饰我的 ContentControl。基本上,我希望 ContentControl 具有“覆盖”效果,即它是最顶层的对象,高于所有其他元素 - 类似于 Popup 控件。

这是我遇到的问题,我希望有人能指出我哪里出错了:

我有一个带有两行定义的支架网格。第一行包含一个 UI 元素 - 例如,一个矩形。第二行包含一个自定义控件,我开发它来模拟“抽屉”滑出的功能。基本上,当我单击按钮时,我将为 TranslateTransform 设置动画以“向上滑动”我的 ContentControl。这很好用 - 除了它在网格第一行的矩形下方被裁剪。如果我删除网格中的行定义,那么当实现所需的行为时 - ContentControl 被“向上”移动并部分“在”矩形的“顶部”。矩形只是我想要实现的一个占位符。我基本上想要一个抽屉式控件,它可以滑出并位于所有其他控件之上。

我对使用 Adorner 类有点陌生,所以,我希望有人能指出我哪里出错了。

谢谢。

克里斯

0 投票
1 回答
428 浏览

c# - 造型装饰

嘿,我在 Canvas 上有一堆 ContentControl,每个 ContentControl 上面都有一个装饰器以增加选择区域(一些 ContentControl 可能呈现为 1 像素线,因此很难单击)。

我想让装饰器由 XAML 中的任何人设置样式,例如,当鼠标悬停在装饰器上时,它将显示蓝色轮廓。

如何让装饰者从我的资源字典中获取 ControlTemplate?

谢谢。

0 投票
2 回答
891 浏览

c# - 如何获取 WPF 用户控件可见部分的大小?

我有一个由标签和文本框组成的用户控件。它在滚动查看器中。

我在它上面画了一个装饰器,我需要将装饰器的大小调整为控件的可见大小。

如何获得控件的可见大小?

在下图中,绿色矩形是装饰器。如您所见,它被绘制在右侧的滚动条上。

是否可以获得渲染部分的大小,还是我必须手动通过可视化树并计算它?

编辑:更多背景信息

我正在构建一个非常有限的表单设计器。一切都在代码中发生。装饰器用于显示当前选定的控件。

样本

0 投票
1 回答
696 浏览

c# - 装饰器与装饰元素上方的控件重叠

嘿,我对装饰器有疑问。我创建了调整大小的装饰器,它有四个 Thumb 控件,一个用于装饰控件的每个角。控件正在画布上绘制,用户可以选择它并调整它的大小。画布托管在 ZoomBoxPanel 控件上,该控件基本上将 ScaleTransform 和 TranslateTransform 应用于整个事物以提供缩放和平移支持。

问题是,当一个项目超出缩放面板的范围时,并且项目按照您的预期进行裁剪(例如当您设置 ClipToBounds = true 时),您仍然可以看到装饰器!谁能告诉我一种防止这种情况的方法?

证据。黑色方块是选中的那个,两个调整大小的拇指是可见的(右),其他的不应该是可见的(左)

谢谢!!

0 投票
2 回答
2640 浏览

wpf - 让 TextBox 根据 ModelView 中的布尔值显示消息的最佳方法

我有一个文本框,它需要改变它的边框颜色,然后在文本框下方显示一条消息。应根据模型中的布尔值显示/隐藏此消息。实现这一目标的最佳方法是什么?

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

wpf - WPF - 拖放 - 装饰器在控件外消失

我正在使用 WPF 创建两个 ListView 并实现拖放功能。(intra-listview 和 inter-listview)

我在这里找到了一个有趣的帖子。

但是,有一个问题。当我从 listView1 中拖动一个 listviewitem 时,我只能在 listView1 中看到装饰器(幻影图像)。当我想将 listviewItem 放到 ListView2 上时,我也必须在那里看到装饰器。基本上,装饰器仅出现在开始拖动操作的 listView 上。一旦它在 listView 之外,它就会消失。

我做了一些研究,找不到一种方法让装饰器在启动拖动的控件之外可见。

谁能帮我一些建议?

0 投票
4 回答
14003 浏览

c# - 在 WPF 中绘制圆圈

我正在尝试编写一个 WPF 应用程序,您可以通过双击在窗口上绘制圆圈。到目前为止,我有这个代码:

这是客户端代码:

圆圈应该以双击窗口的点为中心;但是,上面代码绘制的圆圈在“双击点”的下方和右侧居中。如何解决这个问题?

编辑:myLabelHeight=350Width=525. 假设我双击该点(X,Y);然后圆圈被绘制在((350+X)/2,(525+Y)/2)

编辑 2:为了完整起见,这里是 .xaml 文件:

0 投票
2 回答
2227 浏览

wpf - WPF 验证控制模板重叠

我有一个带有控件模板的用户控件来显示验证错误,验证模板:

而且我似乎无法解决一个看起来像这样的相当恼人的问题:

验证

我一直在尝试使用用户控件和模板上的边距,还有一些 Height=Auto 等,但所有这些都没有真正的帮助。有什么想法吗?

如果这有助于主用户控件(嵌套有验证的控件)位于带有 AdornerDecorator 的 TabItem 中。

任何帮助表示赞赏。