问题标签 [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 投票
3 回答
9904 浏览

c# - GetAdornerLayer 神秘地返回 null

我一直在为我的应用程序的多个版本使用相同的代码,没有任何问题,但我现在神秘地收到NullRerefenceException以下内容:

background只是一个Border元素。

我对可能导致它的两个想法是 a) 切换到 .NET 4.0,以及 b) 将上述元素的实例(即 a UserControl)放在ItemsControl.

奇怪的是,这种情况并非一直发生,而且很难预测何时会发生,因此并不可靠。

0 投票
1 回答
85 浏览

.net - How to give error feedback during a drag operation?

I am trying to give some visual feedback to the user during a drag/drop operation. The feedback I'm struggling with is in the case where the drag target is somehow invalid for the type of data being dragged. I'd like there to be some feedback (during the drag) which displays a small message as to why the drag would be invalid.

I am trying to implement this by adding an adorner to the target, and have this display some message when enabled. This seems to work ok, but isn't great. The adorner seems like quite a low level way of doing this, as I need to implement the OnRender function. I would prefer if my adorner simply contained normal WPF controls (like text labels, etc), rather than have to define my own rendering.

Is there a way of adding normal WPF controls to an adorner instead of overriding OnRender?

Is there something I should be using instead of adorners to give feedback to the user during a drag operation?

0 投票
4 回答
1468 浏览

wpf - WPF:装饰 ViewModel?

我有这些 ViewModel:RecordViewModel、ComponentViewModel,其中 RecordViewModel 本质上是几个 ComponentViewModel 的容器。

这些 ViewModel 的显示当前由 DataTemplates 处理,看起来像这样:

我现在想提供的是一种更改 ComponentViewModel 显示顺序并从列表中删除某个 ComponentViewModel 的方法。我开始这样做是通过操作 ComponentViewModel 的 DataTemplate 并添加提供这些功能的按钮(单击将触发 ComponentViewModel 上的一个方法,该方法将(通过对 RecordViewModel 的引用“Parent”)调用 RecordViewModel 上的方法来执行操作(如 component.Parent.DeleteComponent(this))。

在我看来,这个问题是真正应该操纵组件位置/删除组件的记录而不是组件本身。

因此,我考虑使用附加到 RecordViewModel 并呈现按钮的装饰器来为每个 ComponentViewModel 提供功能(删除、上移、下移)。

然而,问题是这些装饰器需要引用他们装饰的 Control-derivate(这没关系,我只需绑定到 Record-DataTemplate 中的 ItemsControl)但是当我想显示按钮时出现问题每个 ComponentViewModel 的正确位置。我只引用了给定的 ComponentViewModels 而不是它们的视觉表示(在 DataTemplate 中定义的东西),所以我无法知道在哪里放置 3 个按钮。

有没有办法解决这个问题?或者对于这些要求,使用 ViewModels/DataTemplates 是否可能不是一个好主意,因此我应该使用 Control-derivates/ControlTemplates 吗?

提前致谢!

0 投票
2 回答
2515 浏览

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

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

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

0 投票
1 回答
1793 浏览

wpf - 我应该使用 AdornerLayer 来避免将我的装饰器剪裁到屏幕外吗?

我正在编写一些涉及 Adorners 的 WPF 代码。我正在使用 Josh Smith 的 UIElementAdorner.cs(在他的Infragistics 博客上的项目中找到)。我用信息文本的简介来装饰。我需要巧妙地放置我的装饰器,以免它从屏幕上剪掉。

确定我是否要剪辑的最佳方法是什么?

我正在使用以下代码来创建和放置我的装饰器。我有一个有趣的感觉,基于我是否会剪辑AdornerLayer并不是最好的选择。

请记住,此代码包含在TargetedTriggerAction中,设计人员(也称为 Blend 的用户)希望在某些 UI 元素上方显示信息时使用该代码。因此,这段代码对要装饰的元素或其环境知之甚少。

0 投票
1 回答
2195 浏览

wpf - Scrollviewer 中的错误装饰器

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

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

有任何想法吗?

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

0 投票
2 回答
133 浏览

wpf - 连接到集合被填充并移除加载装饰器的那一刻?

我在 WPF DataGrid 中对数据进行分组。这需要很长时间,所以我想展示一个加载栏/装饰器。

我正在使用 MVVM。当数据网格完成分组时,您将如何删除/淡出加载栏/装饰器。

如何获得数据 100% 分组的时刻?这可以以某种方式在 XAML 中设置或检索等吗?

0 投票
1 回答
1636 浏览

c# - WPF:装饰控件(文本框)隐藏时不隐藏 Validation.ErrorTemplate

我有一个文本框,它根据是否在组合框中选择了一个项目而被隐藏。

这部分工作正常。

但是,它也设置了 ValidatesOnDataErrors 并且如果 TextBox 存在错误,那么当 TextBox 被隐藏时,ErrorTemplate(在 Adorner 层中)仍然存在。

我想我明白,因为 ErrorTemplate 被设置到全局 Adorner 层,它没有意识到它没有逻辑连接的 TextBlock 已被隐藏。

关于如何使用或解决此问题的任何想法?我尝试在 Grid 中添加一个明确的 AdornerDecorator,它绑定到 ComboBox 值。

0 投票
1 回答
7998 浏览

wpf - WPF:忽略鼠标点击覆盖/装饰器,但处理 MouseEnter 事件

我真正想要的是一个忽略鼠标单击事件但仍捕获鼠标进入和离开事件的 IsHitTestVisible 版本。

背景:无论何时,都会在控件下弹出一个信息叠加层,并带有焦点。这是一项要求,因此我无权删除此行为。这是使用包含矩形形状的装饰器来实现的,并填充了图像画笔。所有控件均以编程方式创建,不涉及 XAML。

期望的行为:当用户将鼠标悬停在 Rectangle 上时,它应该变得部分透明。这样他们就可以看到覆盖层下方的其他控件并单击它们。当用户点击覆盖时,点击应该传递到覆盖下的任何控件,就在用户点击的地方。

问题:如果我将IsHitTestVisible设置为 True 以允许鼠标点击通过,我不会收到 MouseEnter 事件。

有没有一种简单的方法可以让 IsHitTestVisible True,然后将除了 2-3 个事件之外的所有事件传递给装饰器下方的正确控件?我正在寻找一种不涉及计算光标下方的控件的解决方案,因为 WPF 显然能够为我做到这一点。

或者,我是否可以将 IsHitTestVisible 设置为 False,然后使用另一种简单的方法来确定鼠标何时位于装饰器上方?

更新:我仍然希望得到答案,但到目前为止,最有希望的解决方案似乎是让 IsHitTestVisible 为真,并使用 WPF 命中测试 API 来确定鼠标光标下方的控件类型;如果它是我所知道的,我会向它发送一个 Click 命令。不过,不确定这是否值得;截至目前,单击会关闭我的叠加层,因此用户只需单击两次。

谢谢!

0 投票
2 回答
898 浏览

wpf - 如何在 Visual Studio 2010 中为数值数组创建自定义图像装饰器加载项?

我使用很多浮点图像,并且会发现拥有基于图像的数组表示非常有用。我想创建一个 WPF UserControl,它将数据数组(如下所示)呈现为图像,而不是文本值的可滚动列表。

这可能吗?我查看了有关 VS 2010 可扩展性的MDSN 文档、SO 的VS 2010 扩展列表以及有关创建自定义编辑器的主题,但我对从哪里开始有点迷茫。

替代文字

更新1:

感谢 Brian 和 Basarat Ali 在 DebuggerVisualizer 上的领导。看起来是正确的策略,但不幸的是,任何类型的数组的可视化工具都是不允许的。

一种解决方法(实用性有限)是可视化包装器对象。

在 Brian 的建议下,我在 CodePlex 上发布了一个解决方案:

VS2010 Debugger Visualizers Contrib ( http://debuggervisualizers.codeplex.com/ )。

该项目的源代码演示了一个工作包装可视化器和一个用于一维 double[] 数组的非功能性“原始”数据可视化器。这是运行测试控制台的屏幕截图:

替代文字

如果有人对如何解决此问题有任何建议,请告诉我!

此外,欢迎对 System.Array 为什么无法可视化的任何解释!

更新 2:

我刚刚用 DebuggerVisualizer 这个词重新搜索了 SO,发现这是以前问过的。看起来用户 Will Dean 建议使用 Wea​​kReference 来实现 Project Mole 的解决方法。不过,看不到这在 DebuggerVisualizer 中是如何工作的。

更新 3:

Project MoleJosh Smith刚刚提出了一个非常有用的解决方法(感谢 Josh!):

请注意,您可以使用 ArrayWrapper 方法而无需修改源代码来打开可视化工具。你可以在 VS 的 Watch 窗口中输入:

新的 YourNamespace.ArrayWrapper(myArray);

按 Enter 键,然后您应该会在该代码行旁边的 Watch 窗口中看到一个放大镜图标。单击它以打开您的自定义可视化工具。