2017-08-08 128 views
0

WPFアプリケーションで作業中で、実行時に以前ボタン用に作成したButtonのクリックイベントを発生させたいとします。そして私はボタンのクリックが動的でなければなりません 例:私は2つのボタンがCity1であり、1つがState1であり、両方ともClickイベントを持っています。別のButtonが同じ名前City2とState2を持っています。どのような私はCITY1クリックのイベントを発生させ、同様ステート1ここで をクリックしたいされたいのは私のコードです:WPFでのコード内のボタンのクリックイベントを発生させる方法

Button getSpecificButton = XYZ.Common.ExtensionMethods.FindLogicalChildren<Button>(this).Where(btn1 => btn1.Content == Intrbt.Content).FirstOrDefault(); 
if (getSpecificButton != null && getSpecificButton.Content != null) 
{ 
    //getSpecificButton.Name = getSpecificButton.Content.ToString(); 
    //getSpecificButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent)); 
} 

私が使用され、この拡張メソッドは、私は例外をgetttingています。ここアプリケーション内のすべてのボタンを取得してもらいます。

public static IEnumerable<T> FindLogicalChildren<T>(DependencyObject depObj) where T : DependencyObject 
    { 
     if (depObj != null) 
     { 
      foreach (object rawChild in LogicalTreeHelper.GetChildren(depObj)) 
      { 
       if (rawChild is DependencyObject) 
       { 
        DependencyObject child = (DependencyObject)rawChild; 
        if (child is T) 
        { 
         yield return (T)child; 
        } 

        foreach (T childOfChild in FindLogicalChildren<T>(child)) 
        { 
         yield return childOfChild; 
        } 
       } 
      } 
     } 
    } 

しかし、このコードは機能していません。この問題を解決してください。

+0

私は 'ICommand'実装を使って' Button.Command'プロパティをバインドすることをお勧めします。次に、ビジュアルツリー内を歩き回ってボタンをクリックしてシミュレートする必要はありませんが、ビジュアルツリーにアクセスする必要はなく、コード内で 'ICommand'を実行するだけです。 – Adwaenyth

+0

私はICommandを使用できません100個のボタンがあるので、完全なコードを変更する必要があります。したがって、ソリューションを提供してください –

+0

State1.RaiseEvent(新しいRoutedEventArgs(ButtonBase.ClickEvent));ボタンの特定の名前を書いている間、それはうまく動作します。しかし、私はgetSpecificButton.RaiseEvent(新しいRoutedEventArgs(ButtonBase.ClickEvent))としてボタンを同意している場合。例外を投げる。 –

答えて

-1
getSpecificButton.Click += btn_Click; 

//separate method 
private void btn_Click(object sender, RoutedEventArgs e) 
{ 
    // ... 
} 

これは動作します。 しかし、ICommandはAdwaenythのコメントとして使用してください。

+0

これは実際に私にとってはうまくいかないでしょう。なぜなら、私は、実行時間に何らかのボタンがクリックされたときにボタンをクリックすることがわからないからです。たとえばStateがクリックされてからstate_clickが発生する必要があります。都市をクリックしてからcity_clickを呼び出す必要がありますが、同じ方法でこれを達成できます。それ以外の場合は100個のボタンがありますが、100個のスイッチを避けるか、 –

関連する問題