问题标签 [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 回答
1034 浏览

c# - 在设计时修改属性不会更新 Expression Blend 4 中的 XAML

我一直在为 WPF 开发一个自定义面板,并且遇到了一些设计时代码的问题。将问题归结为,如果我在设计时运行了一些代码,并且该代码修改了某个对象(面板或面板的子项)上的属性,则在设计器中,我看到了适当的更改,但 XAML组成窗口,没有更新。

例子:

如果您创建一个新的 WPF 应用程序并将该类放入其中,则使用此 XAML 创建一个窗口:

如果您随后更改面板的宽度(通过在设计器中拖动宽度手柄,或在属性编辑器中更改宽度属性),则内部的矩形将在设计图面中正确更新。但是,如果查看 XAML,只有面板的宽度会更新,矩形的宽度保持不变。如果您在更改面板宽度后构建项目,矩形将返回到 XAML 中定义的值:(

所以我花了很多时间在互联网上寻找解决方案,从我收集到的信息来看,这是因为设计师有源(XAML)的概念,视图设计师的实际东西你'正在玩)和实例(对象的内存中实例化,由 ModelItem 类定义)。它是需要修改的实例,以便从我收集的内容中更新 XAML。但是,我没有获得 ModelInstance 的运气。

这篇文章引导我尝试这样的事情:

但是,这只是设法使 Blend 崩溃...我在调试器中逐步执行此代码,它告诉我崩溃是 nullRefferenceException,但不清楚什么是 null。我相信它是 modelTreeManager 的根属性,但如果是这样,我不知道如何正确设置它。

所以我想要完成的事情似乎很简单。在设计时更改某物的属性并将更改序列化为 XAML ...据说这是通过在设计器上修改项目的 ModelItem 支持者来处理的,但是,我找不到任何有关如何完成此操作的文档.

进一步阅读
我意识到我的示例正在更改布局,还有其他方法可以实现这一点(例如使用布局系统(arrangeOverride 和 measureOverride),但是这种方法并没有给我所需的控制类型。

此外,我打开了装饰器树,创建了一个没有 UI 的自定义装饰器,但挂钩了面板的 onPropertyChanged 事件并修改了孩子的宽度。这实际上有效,因为装饰者可以获取 ModelItem,但它只能以有限的方式工作。使用装饰器路线,该方法在 Cider (visual studio 2010) 中完美运行,但在 Blend 中仅适用于一半。在混合中,如果在属性编辑器中更改面板的宽度,则子项会更新。但是,如果在混合中拖动设计表面上的宽度手柄,则子项不会更新(在 Visual Studio 中,使用设计表面句柄时子项会更新)。

装饰器的代码要复杂得多,但遵循演练:创建设计时装饰器(搜索 MSDN,我只能发布一个链接)修改为适用于两个设计师(使用 MyAssembly.Design.dll 而不是 MyAssembly.VisualStuido。设计.dll)。可能值得注意的是,此中的不透明度滑块在 Cider 中实时更新(因为它被拖动),但仅在 Blend 中更新鼠标释放。如果有人感兴趣,这是我的装饰器的代码。

0 投票
1 回答
254 浏览

c# - 从装饰器访问数据

我正在用 C# 和 WPF 编写一个 2D 图形工具,我AdornersShapes绘制到Canvas.

我希望装饰者在一个形状被认为是“选定的”时突出显示,我目前正在使用MouseDownMouseUp事件。

但是,用户可以选择多个形状,因此并非所有形状都会同时接收鼠标事件。

我有一个管理绘图的类,它包含一个List选定的形状。让装饰者访问这些数据的最佳方法是什么,以便他们可以查看是否选择了他们的装饰元素?

我考虑过一些事情:

  • 制造List全球 - 坏主意
  • 对每个形状进行子类化以添加“选定”属性 - 需要更改对我类中形状的所有引用
0 投票
4 回答
4206 浏览

wpf - WPF 控件移动但它的装饰器 - 不是:"/

我在 WPF 行元素上创建了一个装饰器,因为需要添加一些文本。

现在,当这条线被移动时,装饰器不会自动“跟随”这条线。事实上,它并没有刷新它的ef:

替代文字 替代文字
这里黑色曲线是控制图,红色“120 m”是装饰图。

一些代码

0 投票
2 回答
3496 浏览

wpf - 装饰元素上的装饰器和事件

我有一个自定义线形,它使用装饰器在该线的中间显示一个数组和一些文本。

替代文字

问题是装饰元素的行为独立于装饰元素,并且不会将事件“转移”给它。在下面的代码中,我被迫手动将装饰元素重新链接到装饰元素(ta.MouseLeftButtonDown += Adorner_MouseLeftButtonDown;),但不幸的是,即使这样也不起作用......有人可以在调用 this.OnMouseLeftButtonDown 时提出什么问题,为什么我没有收到相应的事件?

0 投票
2 回答
800 浏览

wpf - 在与控件相同的层中显示验证错误

在使用 Validation 类时,有没有办法在与具有无效值的控件相同的层中显示验证错误(使用 Validation.Errors 附加属性)?

我想要的是在控件下方显示带有无效值的错误。但是错误文本不应该与其他控件重叠,所以错误文本必须与控件在同一层,或者不是?

最好的问候, 杰斯珀

0 投票
2 回答
208 浏览

.net - WPF 中没有 ContextMenuChanging(ed) 事件

我有一个自定义形状 - MyShape- (可能是控制,没关系)。

MyShape有一个装饰器 - TextAdorner

TextAdorner应该具有相同的 ContextMenu (MyShape因为它们代表相同的唯一对象)。

MyShape 的 CustomMenu 在某些情况下在代码中发生了更改。因此,我需要检测MyShape更改其 CustomMenu 以更新装饰器 ContextMenu 的时刻。

但是,没有ContextMenuChanging, 也没有ContextMenuChanged事件。

我将此代码用于第一个 ContemxtMenu 分配,但是当装饰元素更改上下文菜单时,我不知道如何同步它们。

在这种情况下我应该如何进行?

0 投票
1 回答
4578 浏览

c# - How to make WPF Adorner visible

i'm struggling a bit about when or how to activate / make visible a MoveAdorner.

I try the following but have no success: In the element that is to be adorned i add the Adorner in the GotFocus event. That alone did not suffice so i added a call to InvalidateVisual(). But nothing happens. Has anyone a hint on how to make those Adorners Visible?

For Clarification: the adorned element is a Control that is positioned inside a derived Panel of a custom ItemsControl.

The MoveAdorner derives from Adorner and simply draws two Boxes on the top and bottom line of the control.

with kind regards

0 投票
2 回答
1516 浏览

wpf - Wpf Adorner 不响应交互


我正在尝试在 wpf 中创建一个叠加层(背景变暗),类似于您可以在网上找到的用于弹出图像的叠加层。我希望它可以在应用程序的多个部分中重复使用,并具有不同类型的内容。

这是装饰器类的构造函数的临时代码(只是为了尝试)

此外,在课堂上(当然),我有 MeasureOverride 和 ArrangeOverride 的 ovverrides 来为装饰者提供被装饰元素 GetVisualChild 和 VisualChildCount 的正确大小......

这里的问题是正确显示了装饰器,但没有在装饰元素上应用任何事件或行为。例如:

此处显示了按钮,但我无法单击该按钮,并且对按钮鼠标悬停没有任何影响。我仍然无法弄清楚问题所在。

0 投票
1 回答
1663 浏览

wpf - 我可以在数据模板之外向 DataTemplate 项添加装饰器吗?

基本上,我有一个 DataTemplate 来定义 ItemsControl 中的项目,并且我想在单击项目时在项目上方弹出一个对话气泡。到目前为止,我的尝试导致我的装饰器出现在 DataTemplate 内并被该 DataTemplate 的边界剪裁而不是在它之上。我一直在使用一个漂亮的装饰器控件,可以在这里找到:http: //www.codeproject.com/KB/WPF/adornedcontrol.aspx

我的 XAML 看起来像这样:

有什么想法吗?我试图对装饰者做的事情甚至可能吗?

0 投票
2 回答
2425 浏览

wpf - 突出显示或勾勒装饰层中的任何 UIElement

我希望能够以某种方式勾勒或突出装饰层中的任何特定UIElement(甚至可能Visual)。装饰器本身不是问题。我更关心创建UIElement.

我的目标是OuterGlowBitmapEffect提供类似的效果。我想跟随UIElement. 我尝试了许多方法来检查Clip属性(几乎总是为空)和其他一些方法,但我失败了。

现在我想这肯定很容易,只是我错过了一些东西。此外,谷歌这次也不是我的朋友。

编辑:NET 3.5 是一项要求