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;
}
}
}
}
}
しかし、このコードは機能していません。この問題を解決してください。
私は 'ICommand'実装を使って' Button.Command'プロパティをバインドすることをお勧めします。次に、ビジュアルツリー内を歩き回ってボタンをクリックしてシミュレートする必要はありませんが、ビジュアルツリーにアクセスする必要はなく、コード内で 'ICommand'を実行するだけです。 – Adwaenyth
私はICommandを使用できません100個のボタンがあるので、完全なコードを変更する必要があります。したがって、ソリューションを提供してください –
State1.RaiseEvent(新しいRoutedEventArgs(ButtonBase.ClickEvent));ボタンの特定の名前を書いている間、それはうまく動作します。しかし、私はgetSpecificButton.RaiseEvent(新しいRoutedEventArgs(ButtonBase.ClickEvent))としてボタンを同意している場合。例外を投げる。 –