【发布时间】:2012-12-29 04:53:19
【问题描述】:
在 .NET v4 上使用 VS2010 我有以下问题。
我创建了两个自定义控件,Cell 和 Board,我想使用 Cell 控件来捕获一些事件并显示一些数据。我需要捕获的最重要的事件是 Click 事件。
当自定义控件没有子控件项时,这不是问题。 在使用 Cell 的级别上,我可以毫无问题地将事件处理程序绑定到 Click 事件。
public partial class Cell : UserControl
{
....
}
public partial class Board : UserControl
{
private void InitializeComponent()
{
...
this.Cell99.Click += new System.EventHandler(this.Cell_Click);
...
}
}
Cell 控件相当小(大小约为 50x50 像素),我希望它显示的内容之一是尽可能大的整数值(大小约为 50 x 50 像素 ;-) 这样做没问题,我想为此使用一个标签控件。
一旦我向 Cell 添加另一个(例如标签)控件,它就不再可以看到某些事件,因为子事件正在获得“优先权”。对于 Label 控件覆盖的像素,它将捕获我想用 Cell 控件而不是 Label 控件处理的 Click 事件。
如果我只想在 Cell 中使用一个控件,解决方案是将事件从 Label 控件链接到 Cell 控件。但是我至少有 10 个不同的(标签)控件需要进入 Cell 以显示我拥有的所有信息。将所有控件的所有事件转发给它的父级对我来说有点麻烦。 (除了容易出错和其他错误。)
为用户控件中的子控件禁用事件捕获的正确方法是什么?
如前所述,我曾想过将事件从孩子转发给父母,但现在拒绝了。
然后我想到了不使用控件来显示数据,而是生成一个包含信息的位图并将其用作背景。我……不期待那个!
最后,我想到了在所有其他控件之上放置一个额外控件,并将其捕获的事件转发给父级。这可能是最简单的继续方式。
不知何故,我认为必须有更好的方法来解决这个问题,但是如何?
欢迎任何建议。
【问题讨论】:
-
您能向我们展示您的一些 XAML 吗?我刚刚创建了一个 WPF Windows,添加了一个带有边框的 WPF UserControl 和一个占据整个空间的标签,然后我什至在窗口后面的代码中的标签和 UserControl 上注册了 MouseUp,如果我点击标签,两个处理程序都会被触发。
-
致蒂莫西:哎呀,标签错误,我在这个项目中使用的是窗口窗体,而不是 WPF。对不起。
-
致 dabisoa:给定的解决方案是 TextBlock 上的“IsHitTestVisible="false"。”标签控件没有该属性。我错过了什么?
-
IsHitTestVisible 适用于
WPF而不是WinForms