问题标签 [eventsetter]
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.
c# - 为什么 Setter 属性不适用于超链接?
我想为我的窗口中FontSize
的所有s 设置(例如)。Hyperlink
这是我MainWindow
的XAML
内容:
如果我明确添加样式,它会起作用...(即添加x:Key="HyperlinkStyle"
到Style
标签,然后添加Style="HyperlinkStyle"
到Hyperlink
)
如何自动将样式设置为 all Hyperlink
s ?
编辑:
@keyboardP、@Anatoliy 和 @kmatyaszek - 你很好......谢谢大家!我终于把Style
标签移到了<RichTextBox.Resources>
房产上。
c# - 在 WPF 中将事件从样式传播到 MainWindow
我在单独的 XAML 中有一个自定义样式,CustomTabItem.xaml
它会引发如下事件:
这很容易在我创建的文件中引发一个事件,称为CustomTabItem.xaml.cs
:
这一切都很好,但我现在需要在MainWindow
(当然在事件处理程序中ClickNewSpaceOne
)引发一个事件,但我不知道如何将此事件传播到MainWindow
.
我找到了这篇文章,但它看起来并不像同样的情况,所以任何我没有找到的不同文章或任何答案我都会非常感激。
c# - 在 Xaml 中处理样式标记中的事件
我在 xaml 中的Style标记内使用EventSetter并处理 MouseEnter 事件。但问题是鼠标输入事件只可见一瞬间,然后就消失了……为什么会这样?为什么它没有持续存在?
这是我定义样式的 xaml 文件
这是我处理事件的 .cs 文件
wpf - 有没有办法响应双击 WPF 中的 ListBoxItem?
我有一个带有项目列表框的简单 WPF 应用程序。为简单起见,我将其设为字符串列表,但实际上,它将是一些复杂类型的列表。当列表框中的项目本身被双击时,我想响应它。显然,项目本身的 ListBox 上没有直接的双击事件。是否有一种简单的方法来响应被双击的 ListBox 中的项目(不是列表框本身)?
这是我的xml:
c# - Style 的 EventSetter 是否有可能与另一个事件处理程序并排运行?
我在 WPF 中Style
为 a定义了一个。Button
在那种风格中,我希望在单击按钮时更改按钮的背景。例如:
在后面的代码中:
所以这是一种适用于多个Button
s 的通用样式,每个 s 执行不同的工作。上述事件处理程序是否有可能与单击每个按钮时为每个按钮指定的其他事件处理程序一起运行?
Click
如果我为使用此样式的按钮指定处理程序,它是否会覆盖EventSetter
或EventSetter
具有更高的优先级?
c# - 在运行时将 EventSetter 动态添加到现有的分层数据模板
我有一个 WPFTreeView
控件,它通过绑定获取分层数据。为了控制我使用的控件中的视觉输出Hierarchical Data Templates
。DataContext
of the是TreeView
一个ObservableCollection
自定义类,它可以容纳不同类型的子类型。
由于PaletteGroup
该类可以容纳 和 类型的子节点Palette
,因此PaletteGroup
我使用 aCompositeCollection
将两个ObservableCollection
s 组合在一个层次结构中以用于 中的视觉输出TreeView
,因为我的类可以具有您想要的尽可能多的子节点级别。
视觉输出本身是在我的 xaml 文件中定义的,我在其中使用Name
两个类的属性来显示对象的名称:
如您所见,我还将TreeView
控件包装在一个自定义类中,用于拖放操作,名为DragDropDecorator
,我在其中添加了运行时控件的所有必要事件。由于我使用了很多不同的控件,我厌倦了总是将事件绑定到 xaml 文件中的控件。此类的Loaded
事件如下所示:
这对于控件来说绝对可以正常工作ListBox
,这也是我的项目的需要。但是我很难控制该TreeView
控件,因为事件仅针对 中的最上层节点引发TreeView
,即使我尝试对某些孩子进行拖放操作。
首先,我尝试将所有事件添加到TreeView.ItemContainerStyle
. 这适用于第一级子节点,但忽略了更深的节点结构以及最上层的节点。
然后我尝试将所有事件添加到类Hierarchical Data Template
的Loaded
事件中DragDropDecorator
:
InvalidOperationException
使用此代码,由于已经密封的模板对象,我得到了一个。
所以我的问题是:
- 如何将 EventSetters 添加到已存在
Hierarchical Data Template
的运行时? - 这是正确的方法吗,还是我有其他选择可以使它更优雅?
经过数小时尝试不同的方法并在互联网上搜索解决方案后,我现在陷入困境。如果有人能指出我正确的方向,或者甚至给我写一个小代码片段,我将不胜感激,这应该可以帮助我回到正轨。
我希望我发布的代码就足够了。如果没有,请发表评论,我将添加其他部分。
提前感谢您的时间!
wpf - WPF baml 错误:静态资源中的 EventSetter 被设置两次,第二次为空
如果我尝试在 xaml 中存储 SetterBase 对象的集合,其中包括 EventSetter,则 xaml 加载程序会引发错误。
根本原因是 xaml 加载器尝试设置 PresentationFramework.dll!System.Windows.EventSetters.Event 两次:第一次设置为正确的值 (ButtonBase.Click RoutedEvent),但第二次设置为 null,这会引发异常。不涉及我的附加属性回调。
为什么它尝试将事件添加到 EventSetter 两次,为什么它第二次为空?我检查了正在使用的 ctor 是默认的,所以 EventSeetter 没有以任何不寻常的方式与集合交互,所以不是这样。实际原因是 wpf 中的一个错误,它使解析事件的两部分结构(Event 和 EventHandler)的挑战变得模糊。
看法
后面的代码只有 InitializeComponent 和事件处理程序的存根。在 InitializeComponent 期间发生错误。
行为
错误
调试
我在 System.Windows.EventSetter.Event 处设置了一个函数断点,其中包含一个操作来记录传递给 setter 的值...
然后我运行应用程序并检查输出窗口,可以看到 setter 被击中了两次,第一次使用正确的值,第二次使用 null ...
工作示例可以在名为 EventSetterNull-SO-41604891-2670182 的项目中的这个GITHub Repo的解决方案中找到
巴姆
通过在 XamlNodeList 的 Index 成员中设置 BP,我可以捕获与 SetterBaseCollection xaml 对象关联的 xaml 符号...
错误?
baml nodeList 看起来很奇怪,首先从 idx[20] 开始多了一个 Event 成员,而这个成员实际上是一个 System.NullReferenceException。
这被传递给 XamlObjectWriter,而 XamlObjectWriter 又被传递给 EventSetter 属性,这就是错误的原因。
baml 然后按预期进行,显示处理程序成员并正确终止成员和对象。
结论
问题在于从 xaml 到 baml 的转换,所以我会说这是一个错误。尽管这是一个可以避免的边缘情况。
解决方法
与其尝试在样式中设置事件,不如在父对象中使用附加属性。例如,StackPanel 中的 ButtonBase.Click="StyleClick" 会将行为传递给我最初尝试做的所有 clicky。属性设置器的集合仍然可以在静态资源中设置并由附加的基于属性的行为使用。
进一步研究根本原因
问题是事件属性有两个元素:事件和处理程序。当Baml2006Reader解析 baml 中的对象时,它需要允许它的结构以确保它处于正确的状态以忠实地解释对象成员。为此,它有一个状态机,由ReadObject中的 while 循环驱动,称为Process_OneBamlRecord。此方法解码下一个 xamlNodeType 并调用适当的方法对其进行解析并将其写入为对象。其中一种方法称为Process_Property,它具有硬连接到其中的特殊逻辑来处理 baml 中的事件复合体。
问题是,如果事件作为 Process_PropertyWithConverter 记录在 baml 中,则此方法不知道事件的特殊要求并将所有内容都塞满。事件处理程序以属性标记为前缀(很可能事件解析器是为了递归并为此子结构使用相同的语法),并且由于没有 EndMember、StartMember 状态更改,处理程序子属性由ReadObject 作为事件属性。并且正在创建的事件设置器对象会引发错误,因为它的 Event 属性已设置。
wpf - ResourcesDictionary XAML 中的“无法解析符号”(待合并)
我有一个文件GraphView.XAML。我已将Resources部分拆分为两个ResourceDictionary文件(Vertices.xaml和Edges.xaml),我将它们合并如下:
GraphView.XAML
如果不拆分代码有效,但如果拆分我在Vertices.xaml中收到错误,告诉我方法ChangeVertexColor_OnClick无法解析:
顶点.XAML
我再说一遍,如果放在一个 XAML 中,代码就可以工作。此外,ChangeVertexColor_OnClick方法是在GrapView.xaml.cs中实现的,因此它应该被识别,但是在拆分之后,Vertices.xaml不知何故失去了对x:Class的跟踪(我想它忽略了它的存在,因为它是一个单独的文件)。
如何从分离的 ResourcesDictionary 文件中访问ChangeVertexColor_OnClick ?
谢谢
wpf - 如何为数据网格组合框的 selectionchanged 设置事件?
嗨,我有一个 wpf 项目,它将数据网格绑定到这样的模块:
这工作正常。现在我想添加一些功能,包括将事件设置为组合框SelectionChanged
。所以我改变了xaml
这样的文件:
并在后端添加一个函数,如下所示:
error: "The Application is in break mode."
但是,当我更改组合框单元格时,这会使项目崩溃。那么可能是什么问题呢?提前致谢!
wpf - WPF:如何为样式中定义的按钮分配单击处理程序
我有应该显示字段列表的 ListBox。当为空时,我希望在 ListBox 中有一个“添加字段”按钮。因此,我为添加按钮的空案例创建了一个样式。我需要为按钮的 Click 事件添加处理程序以创建新字段并将其添加到列表中,因此我使用 EventSetter 来附加处理程序。这是我拥有的代码。
问题是,当我编译时,在 EventSetter 标记所在的行出现以下错误:
我难住了。我已经使用了 EventSetter。我该如何解决这个问题?还有其他方法可以指定我应该使用的 EventSetter 吗?