0

私はすでにCustomControl2つのクラスを含むを作成しました。1 つは から派生しLabel、もう 1 つは から派生しTextBoxます。しかし、私は一方を他方と通信させることはできません。たとえば、ユーザーが で Enter キーを押すと、そのTextBox中にあるテキストが何であれ、 にコピーする必要がありますLabel
この疑似コードのように:

protected override void OnKeyDown(KeyEventArgs e)
            {
                if (e.Key == Key.Return)
                {
                    TheLabel.text = TheTextBox.text;
                }
            }

しかし、あるコントロールを別のコントロールから操作することはできません。それぞれが次のように別々のクラスにあるため:

public class TheLabel : Label{...}  

public class TheTextBox : TextBox{...}

SOCustomControl 2 つ以上のコントロールを含み、互いに通信する を作成する特別な方法はありますか?

4

2 に答える 2

1

2 つの方法を使用できます。

まず、個々のコントロールの両方を組み合わせたクラスを作成するコンポジションを使用できます。

    public class CompositeClass {
              private TheLabel  _label;
              private TheTextBox _textbox;
}

または、あるクラスのオブジェクトへの参照を別のクラスに渡して、イベント ハンドラーでそのオブジェクトを操作できるようにすることもできます。

public class TheLabel : ラベル {

   TheTextBox _textbox;

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

}

お役に立てれば。

于 2013-01-30T19:37:33.173 に答える
0

各カスタムコントロールのDependancyPropertyを使用して、情報をリンクします。次に、各依存関係プロパティも変更イベントをサブスクライブします。一方のデータが変更されると、イベントが発生し、必要に応じてもう一方のコントロールで適切な処理を実行できます。

于 2013-01-30T19:36:46.190 に答える