我已经制作了一个包含两个类的CustomControl
。一个派生自Label
,另一个派生自TextBox
。但我不能让一个人与另一个人沟通。例如,当用户按下TextBox
上的Enter键时,无论文本在其中,都必须复制到Label
。
像这个伪代码:
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Key == Key.Return)
{
TheLabel.text = TheTextBox.text;
}
}
但是我不能操纵另一个控件。因为每个人都在这个单独的类中:
public class TheLabel : Label{...}
和
public class TheTextBox : TextBox{...}
SO
有没有一种特殊的方法来创建CustomControl
,包含两个或更多控件,相互通信?
答案 0 :(得分:1)
您可以使用两种方法。
首先,您可以使用合成,在合成中创建一个结合了两个单独控件的类:
public class CompositeClass {
private TheLabel _label;
private TheTextBox _textbox;
}
或者,您可以将对一个类的对象的引用传递给另一个类,以便它可以在事件处理程序中操作该对象:
公共类TheLabel:标签{
TheTextBox _textbox;
public TheLabel(TheTextBox t) {
_textbox = t;
}
}
希望这有帮助。
答案 1 :(得分:0)
您可以在每个自定义控件上使用DependancyProperty链接信息。然后每个依赖属性也将订阅更改事件。当数据在一个中更改时,事件将触发,您可以根据需要在另一个控件中进行适当的处理。