Wpf 如何创建包含两个相互交互的不同控件的自定义控件?

Wpf 如何创建包含两个相互交互的不同控件的自定义控件?,wpf,class,custom-controls,Wpf,Class,Custom Controls,我已经制作了一个包含两个类的CustomControl。一个源于标签,另一个源于文本框。但是我不能让一个人和另一个人交流。例如,当用户按下文本框上的Enter键时,无论文本在其中是什么,都必须复制到标签 像这样的伪代码: protected override void OnKeyDown(KeyEventArgs e) { if (e.Key == Key.Return) {

我已经制作了一个包含两个类的
CustomControl
。一个源于
标签
,另一个源于
文本框
。但是我不能让一个人和另一个人交流。例如,当用户按下
文本框
上的Enter键时,无论文本在其中是什么,都必须复制到
标签

像这样的伪代码:

protected override void OnKeyDown(KeyEventArgs e)
            {
                if (e.Key == Key.Return)
                {
                    TheLabel.text = TheTextBox.text;
                }
            }
但我不能从一个控件内部操纵另一个控件。因为每一个都在单独的类中,如下所示:

public class TheLabel : Label{...}  

SO
是否有一种特殊的方法来创建一个包含两个或多个控件的、相互通信的
自定义控件?

您可以通过在每个自定义控件上使用链接来链接信息。然后,每个依赖项属性也将订阅一个更改事件。当一个控件中的数据发生更改时,事件将触发,您可以根据需要在另一个控件中执行适当的处理。

您可以使用两种方法

首先,可以采用组合,在组合中创建一个类,该类将两个单独的控件组合在一起:

    public class CompositeClass {
              private TheLabel  _label;
              private TheTextBox _textbox;
}
或者,您可以将一个类的对象引用传入另一个类,以便它可以在事件处理程序中操作该对象:

公共类标签:Label{

   TheTextBox _textbox;

  public TheLabel(TheTextBox t) {
       _textbox = t;
  }
}


希望这有帮助。

您的自定义控件上没有
内容
文本
属性吗?如果不是,您只需要公开在基本classIts WPF中定义的类,为什么不直接从
UIElement
派生,并在
Xaml
中构造所有内容,为什么您需要
TextBox
Label
的派生类,我很确定您将能够使用
样式在Xaml中执行任何需要的操作,你需要的任何代码都会在你的单用户控制类中,非常感谢!我将测试它并发布反馈;)
   TheTextBox _textbox;

  public TheLabel(TheTextBox t) {
       _textbox = t;
  }