0

私は個人的なプロジェクトとして単純な IM プログラムに取り組んでいますが、ちょっとした問題にぶつかりました。それは本当に化粧品のようなものですが、私はそれでいくつかの問題を抱えています. メイン ウィンドウにユーザーのすべてのコンテンツを一覧表示するサイドバーがあり、ユーザーが連絡先の名前をクリックすると、メイン ウィンドウのチャット エリアに次のようなタブが開くように設定したいと考えています。その連絡先とのチャット セッションが開始されました。これの本当に重要な部分は、MouseDoubleClick イベントを開始した UIElement (この場合は Label) を取得できることです。これにアクセスできれば、接続に必要な情報にアクセスできます。残念ながら、私はマウス イベントに少し慣れていないため、イベントが発生した後にラベルに戻る方法がわかりません。

foreach (ContactInfo contact in ContactList)
{
    Label currentContact = new Label();
    currentContact.Content = contact.ContactName.ToString() + " (" + contact.MachineName.ToString() + ")";
    currentContact.MouseDoubleClick += new MouseButtonEventHandler(ContactDoubleClickHandler);
    StckPnl_Contacts.Children.Add(currentContact);
}

そして、(現在空の) ハンドラーは次のとおりです。

public void ContactDoubleClickHandler(object sender, MouseButtonEventArgs e)
{

}

私はこれについて間違った方法で進んでいますか?どんな助けでも大歓迎です。

4

3 に答える 3

2

sender(最初に型にキャストして) を調べて、イベントをトリガーした要素を取得できます。

Label targetLabel = sender as Label;
if (targetLabel != null)
{
    // Do something. I recommend not doing a direct cast in case someone in the future hooks another control type to the event handler.
}
于 2013-05-23T20:03:38.207 に答える
1

次のいずれかを使用して、送信者の詳細にアクセスできます

public void ContactDoubleClickHandler(object sender, MouseButtonEventArgs e)
    {
       var uiElement = (UIElement) sender; // cast it to UIElement
    }


public void ContactDoubleClickHandler(object sender, MouseButtonEventArgs e)
    {
       var dp = (DependencyObject) sender; // cast it to dependency object.
    }
于 2013-05-23T20:01:42.933 に答える
1

実際には、送信者はあなたLabelの です。次のように変換するだけです:

Label contact = sender as Label;

ただし、さらに操作を実行する前に、連絡先が null かどうかを確認してください。

于 2013-05-23T20:03:53.150 に答える